Java 带有Jersey测试和JAX-RS的Mockito-未满足的PendencyException
尝试测试一个相当简单的JAX-RS端点Java 带有Jersey测试和JAX-RS的Mockito-未满足的PendencyException,java,mockito,jersey-test-framework,Java,Mockito,Jersey Test Framework,尝试测试一个相当简单的JAX-RS端点 @ApplicationScoped @Path("mypath") public class MyRestService { @Inject private Logger logger; @Inject private EjbService ejbService; @GET public String myMethod() { logger.info("..."); re
@ApplicationScoped
@Path("mypath")
public class MyRestService {
@Inject
private Logger logger;
@Inject
private EjbService ejbService;
@GET
public String myMethod() {
logger.info("...");
return ejbService.myMethod();
}
}
用Mockito和Jersey测试
@RunWith(MockitoJUnitRunner.class)
public class MyRestServiceTest extends JerseyTest {
@Mock
private EjbService ejbService;
@Mock
private Logger logger;
@InjectMocks
private MyRestService myRestService;
...
@Override
protected Application configure() {
MockitoAnnotations.initMocks(this);
return new ResourceConfig().register(myRestService);
}
}
Grizzly容器返回了org.glassfish.hk2.api.unsatifiedpendencyException
用于Logger
和EjbService
的
看起来灰熊正试图,正确地,超越莫基托莫克。
如果我在configure
方法中注册一个AbstractBinder
,一切正常
.register(new AbstractBinder() {
@Override
protected void configure() {
bind(ejbService).to(EjbService.class);
bind(logger).to(Logger.class);
}
});
但我觉得这不是完成注射的最好方法。Mockito风格更适合imho。
我需要做什么来解决这个问题?MockitoJUnitRunner
用于单元测试,JerseyTest
用于集成测试
使用Mockito时,测试将直接调用声明的myRestService
,并进行Mockito依赖项注入
使用JerseyTest时,将创建一个新的web容器,您的测试通过HTTP调用与MyRestService进行通信。在这个容器中,真正的依赖注入正在发生,类甚至没有看到您声明的mock
您可以使用JerseyTest和Mockito,就像您所做的一样。它只需要一些额外的配置(正如您已经发现的那样),不需要
@RunWith
注释。谢谢。问题是AbstractBinder没有那么灵活,也不适用于标准的注释,因为它无法识别注释。