The return isn’t really necessary at all. I’m just verifying that the parameters are “correct” as they are received in the server On Thu, Oct 4, 2018 at 3:54 PM Andy McCright <[email protected]> wrote:
> Hi James, > > What is the failure message/stack trace/etc. that you are seeing? I'm not > too familiar with Mockito, but I don't see anywhere where the resource > class returns anything. Possibly that is the problem? > > Also, did these tests previously work and recently started failing? I have > been making some changes in this area in order to support the MicroProfile > Rest Client - it's possible I regressed something. > > Thanks, > > Andy > > On Wed, Oct 3, 2018 at 4:33 PM James Carman <[email protected]> > wrote: > > > Suppose I have a service like this: > > > > @Path("/") > > public interface HeaderSetResource { > > @GET > > @Path("/hello") > > @Produces(TEXT_PLAIN) > > String sayHello(@HeaderParam("names") Set<String> names); > > } > > > > > > This test case fails: > > > > @RunWith(MockitoJUnitRunner.class) > > public class HeaderSetTest { > > > > @Mock > > private HeaderSetResource resourceMock; > > > > private Server server; > > private String address; > > > > > > private void callHello(Set<String> names) { > > final Invocation.Builder builder = > > webTarget().path("hello").request(); > > names.forEach(name -> builder.header("names", name)); > > builder.get(); > > } > > > > public HeaderSetResource clientProxy() { > > final JAXRSClientFactoryBean factoryBean = new > > JAXRSClientFactoryBean(); > > factoryBean.setFeatures(Collections.singletonList(new > > LoggingFeature())); > > factoryBean.setResourceClass(HeaderSetResource.class); > > factoryBean.setAddress(address); > > return factoryBean.create(HeaderSetResource.class); > > } > > > > @Before > > public void createServer() { > > String port = "10090"; > > address = String.format("http://localhost:%s/", port); > > > > final JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); > > sf.setBus(BusFactory.getDefaultBus(true)); > > sf.setResourceClasses(HeaderSetResource.class); > > sf.setFeatures(Collections.singletonList(new LoggingFeature())); > > sf.setResourceProvider(HeaderSetResource.class, new > > SingletonResourceProvider(resourceMock, true)); > > sf.setAddress(address); > > server = sf.create(); > > } > > > > @Test > > public void multipleHeadersShouldWorkWithProxy() { > > final Set<String> names = new HashSet<>(Arrays.asList("foo", > > "bar", "baz")); > > clientProxy().sayHello(names); > > verify(resourceMock).sayHello(names); > > } > > > > @Test > > public void multipleHeadersShouldWorkWithWebTarget() { > > final Set<String> names = new HashSet<>(Arrays.asList("foo", > > "bar", "baz")); > > callHello(names); > > verify(resourceMock).sayHello(names); > > } > > > > @Test > > public void singleHeadersShouldWorkWithProxy() { > > final Set<String> names = Collections.singleton("foo"); > > clientProxy().sayHello(names); > > verify(resourceMock).sayHello(names); > > } > > > > @Test > > public void singleHeadersShouldWorkWithWebTarget() { > > final Set<String> names = Collections.singleton("foo"); > > callHello(names); > > verify(resourceMock).sayHello(names); > > } > > > > @After > > public void stopServer() { > > server.stop(); > > server.destroy(); > > } > > > > public WebTarget webTarget() { > > final ClientBuilder builder = ClientBuilder.newBuilder(); > > builder.register(new LoggingFeature()); > > return builder.build() > > .property(AsyncHTTPConduit.USE_ASYNC, Boolean.TRUE) > > .target(address); > > } > > } > > >
