Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有Jersey测试和JAX-RS的Mockito-未满足的PendencyException_Java_Mockito_Jersey Test Framework - Fatal编程技术网

Java 带有Jersey测试和JAX-RS的Mockito-未满足的PendencyException

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

尝试测试一个相当简单的JAX-RS端点

@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没有那么灵活,也不适用于标准的注释,因为它无法识别注释。