2016-03-14 3 views
1

Я пытаюсь реализовать что-то похожее на ответ this.Джерси - Как насмехаться с сервисом

У меня есть AUTHENTICATE службы JAX-RS Я желаю, чтобы проверить с помощью тестового джерси рамки, служба что-то вроде следующего

@Path("token") 
public class TokenServiceResource { 
    @Inject 
    private LoginService; 
    @Inject 
    private TokenService; 

    @POST 
    @Path("authenticate") 
    public Response authenticate(@FormParam("username") String username, 
     @FormParam("password") String password) { 
     //Do stuff with login and token service, then return a response 
    } 
} 

Так, очевидно, я хочу, чтобы дразнить из услуг, таким образом основывая мой тест код на ответ связан выше у меня есть следующие

import static org.junit.Assert.assertEquals; 

import javax.ws.rs.client.Entity; 
import javax.ws.rs.core.Application; 
import javax.ws.rs.core.MultivaluedHashMap; 
import javax.ws.rs.core.MultivaluedMap; 
import javax.ws.rs.core.Response; 
import org.glassfish.hk2.api.Factory; 
import org.glassfish.hk2.utilities.binding.AbstractBinder; 
import org.glassfish.jersey.server.ResourceConfig; 
import org.glassfish.jersey.test.JerseyTest; 
import org.glassfish.jersey.test.inmemory.InMemoryTestContainerFactory; 
import org.glassfish.jersey.test.spi.TestContainerFactory; 
import org.junit.Test; 
import org.mockito.Mockito; 
import org.mockito.stubbing.Answer; 
import org.mockito.invocation.InvocationOnMock; 
import com.test.tokenservices.login.LoginService; 
import com.test.tokenservices.response.ServiceResponse; 
import com.test.tokenservices.response.ServiceSuccessResponse; 
import com.test.tokenservices.token.TokenService; 


public class TokenServiceResourceTest extends JerseyTest 
{ 

    public static class MockSuccessLoginService implements Factory<LoginService> 
    { 

     @Override 
     public LoginService provide() 
     { 
      final LoginService mockLoginService = Mockito.mock(LoginService.class); 
      Mockito.when(mockLoginService.authenticate("paul", "password")) 
       .thenAnswer(new Answer<ServiceResponse>() 
        { 
         @Override 
         public ServiceResponse answer(InvocationOnMock invocation) 
         { 
          return new ServiceSuccessResponse("paul logged in"); 
         } 
       }); 
      return mockLoginService; 
     } 

     @Override 
     public void dispose(LoginService t) 
     { 

     } 

    } 

    public static class MockSuccessTokenService implements Factory<TokenService> 
    { 

     @Override 
     public TokenService provide() 
     { 
      final TokenService mockTokenService = Mockito.mock(TokenService.class); 
      Mockito.when(mockTokenService.createToken(Mockito.anyString())) 
       .thenAnswer(new Answer<ServiceResponse>() 
        { 
         @Override 
         public ServiceResponse answer(InvocationOnMock invocation) 
         { 
          return new ServiceSuccessResponse("valid token"); 
         } 
       }); 
      return mockTokenService; 
     } 

     @Override 
     public void dispose(TokenService t) 
     { 

     } 

    } 

    @Override 
    protected TestContainerFactory getTestContainerFactory() 
    { 
     return new InMemoryTestContainerFactory(); 
    } 

    @Override 
    protected Application configure() 
    { 
     return new ResourceConfig(TokenServiceResource.class); 
    } 

    @Test 
    public void testAuthenticateSuccess() 
    { 
     ((ResourceConfig) configure()).register(getAuthenticateSuccessBinder()); 

     MultivaluedMap<String, String> formData = new MultivaluedHashMap<>(); 
     formData.add("username", "paul"); 
     formData.add("password", "pword"); 

     Response response = target("token/authenticate").request().post(Entity.form(formData)); 

     assertEquals(Response.Status.OK, response.getStatus()); 
    } 

    private AbstractBinder getAuthenticateSuccessBinder() 
    { 
     AbstractBinder binder = new AbstractBinder() 
     { 
      @Override 
      protected void configure() 
      { 
       bindFactory(MockSuccessLoginService.class).to(LoginService.class); 
       bindFactory(MockSuccessTokenService.class).to(TokenService.class); 
      } 

     }; 
     return binder; 
    } 

} 

Мой план заключается в предоставлении фиктивных заводов услуг для ответов успеха и неудач

Ho Вевер инъекции мои издеваюсь в JAX-RS WebService терпит неудачу со следующим

org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=TokenService,parent=TokenServiceResource,qualifiers={},position=-1,optional=false,self=false,unqualified=null,1969942970) 
    at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:75) 
    at org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:211) 
    at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:234) 
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:357) 
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471) 
    at org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:162) 
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2022) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:765) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:704) 
    at org.glassfish.jersey.internal.inject.Injections.getOrCreate(Injections.java:172) 
    at org.glassfish.jersey.server.model.MethodHandler$ClassBasedMethodHandler.getInstance(MethodHandler.java:284) 
    at org.glassfish.jersey.server.internal.routing.PushMethodHandlerRouter.apply(PushMethodHandlerRouter.java:74) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:109) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:92) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:61) 
    at org.glassfish.jersey.process.internal.Stages.process(Stages.java:197) 
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:318) 
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) 
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) 
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) 
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) 
    at org.glassfish.jersey.test.inmemory.InMemoryConnector.apply(InMemoryConnector.java:275) 
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:255) 
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:684) 
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:681) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444) 
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:681) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:437) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:343) 
    at com.test.tokenservices.TokenServiceResourceTest.testAuthenticateSuccess(TokenServiceResourceTest.java:118) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128) 
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203) 
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) 
MultiException stack 2 of 4 
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=LoginService,parent=TokenServiceResource,qualifiers={},position=-1,optional=false,self=false,unqualified=null,1186894186) 
    at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:75) 
    at org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:211) 
    at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:234) 
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:357) 
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471) 
    at org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:162) 
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2022) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:765) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:704) 
    at org.glassfish.jersey.internal.inject.Injections.getOrCreate(Injections.java:172) 
    at org.glassfish.jersey.server.model.MethodHandler$ClassBasedMethodHandler.getInstance(MethodHandler.java:284) 
    at org.glassfish.jersey.server.internal.routing.PushMethodHandlerRouter.apply(PushMethodHandlerRouter.java:74) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:109) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:92) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:61) 
    at org.glassfish.jersey.process.internal.Stages.process(Stages.java:197) 
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:318) 
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) 
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) 
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) 
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) 
    at org.glassfish.jersey.test.inmemory.InMemoryConnector.apply(InMemoryConnector.java:275) 
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:255) 
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:684) 
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:681) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444) 
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:681) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:437) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:343) 
    at com.test.tokenservices.TokenServiceResourceTest.testAuthenticateSuccess(TokenServiceResourceTest.java:118) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128) 
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203) 
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) 
MultiException stack 3 of 4 
java.lang.IllegalArgumentException: While attempting to resolve the dependencies of com.test.tokenservices.TokenServiceResource errors were found 
    at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:246) 
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:357) 
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471) 
    at org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:162) 
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2022) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:765) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:704) 
    at org.glassfish.jersey.internal.inject.Injections.getOrCreate(Injections.java:172) 
    at org.glassfish.jersey.server.model.MethodHandler$ClassBasedMethodHandler.getInstance(MethodHandler.java:284) 
    at org.glassfish.jersey.server.internal.routing.PushMethodHandlerRouter.apply(PushMethodHandlerRouter.java:74) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:109) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:92) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:61) 
    at org.glassfish.jersey.process.internal.Stages.process(Stages.java:197) 
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:318) 
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) 
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) 
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) 
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) 
    at org.glassfish.jersey.test.inmemory.InMemoryConnector.apply(InMemoryConnector.java:275) 
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:255) 
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:684) 
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:681) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444) 
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:681) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:437) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:343) 
    at com.test.tokenservices.TokenServiceResourceTest.testAuthenticateSuccess(TokenServiceResourceTest.java:118) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128) 
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203) 
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) 
MultiException stack 4 of 4 
java.lang.IllegalStateException: Unable to perform operation: resolve on com.test.tokenservices.TokenServiceResource 
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:386) 
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471) 
    at org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:162) 
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2022) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:765) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:704) 
    at org.glassfish.jersey.internal.inject.Injections.getOrCreate(Injections.java:172) 
    at org.glassfish.jersey.server.model.MethodHandler$ClassBasedMethodHandler.getInstance(MethodHandler.java:284) 
    at org.glassfish.jersey.server.internal.routing.PushMethodHandlerRouter.apply(PushMethodHandlerRouter.java:74) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:109) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:92) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:61) 
    at org.glassfish.jersey.process.internal.Stages.process(Stages.java:197) 
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:318) 
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) 
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) 
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) 
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) 
    at org.glassfish.jersey.test.inmemory.InMemoryConnector.apply(InMemoryConnector.java:275) 
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:255) 
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:684) 
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:681) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444) 
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:681) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:437) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:343) 
    at com.test.tokenservices.TokenServiceResourceTest.testAuthenticateSuccess(TokenServiceResourceTest.java:118) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128) 
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203) 
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) 
+1

'((ResourceConfig) configure()). Register (getAuthenticateSuccessBinder()); вы не можете этого сделать. Приложение сконфигурировано в конструкторе тестов. Так что вызов слишком поздний. Вам нужно сделать это в методе 'configure'. То есть метод, вызываемый в конструкторе суперкласса для настройки приложения –

+0

, спасибо, я буду rejig заводы – PDStat

ответ

2

Вы должны сказать Джерси о ваших провайдерах. Это не так, потому что инфраструктура DI (HK2) не знает ваших фабрик-макетов и поэтому не знает, как вводить зависимости, которые необходимы вашему классу ресурсов. Вы должны рассказать HK2 о своих дурных фабриках.

JerseyTest предоставляет вам установочный крючок для такого рода вещей - метод configure(). Таким образом, в тестовом классе вам нужно что-то вроде этого ...

@Override 
protected Application configure() { 
    return new ResourceConfig() { 
     { 
      register(MockSuccessTokenService.class); 
      ... 
     } 
    }; 
} 

Это должно настроить JerseyTest использовать ваши поставщики, когда необходимо вводить зависимости.

+0

Я надеялся, что смогу зарегистрировать соответствующие макеты в самом тесте. Разве это невозможно? – PDStat

+0

Я не думаю, что вы можете настроить привязки в тесте. Однако вы, вероятно, можете настроить поставщика, чтобы он использовал данные, к которым имеет доступ тестовый пример. – sisyphus

1

Для вашего конкретного случая использования, вы также можете сделать что-то вроде

class Testing extends JerseyTest { 
    final Service service = Mockito.mock(Service.class); 

    @Override 
    public ResourceConfig configure() { 
     return new ResourceConfig(...) 
      .register(new AbstractBinder() { 
       public void configure() { 
        bind(service).to(Service.class); 
       } 
      }) 
    } 

    @Test 
    public void test() { 
     when(service.doSomething()).then(...); 
    } 
} 

Таким образом, вы можете настроить макет для каждого теста.

Смежные вопросы