我有一个接口:
public interface Service {
void doService();
}和一个类:
public class ServiceUser {
@Inject
@Any
private Instance<Service> serviceImplementations;
public void work() {
serviceImplementations.forEach(service -> service.doService());
}
}和一个测试用例:
public class ServiceUserTest {
@Mock
private Service firstImpl;
@Mock
private Service secondImpl;
@InjectMocks
private ServiceUser serviceUser;
@Test
public void testAllImplementationsCalled() {
serviceUser.work();
verify(firstImpl).doService();
verify(secondImpl).doService();
}
}当我运行测试用例时,我在ServiceUser中得到一个NullPointerException,而在调试时serviceImplementations是空的。如果我在ServiceUser中创建了两个字段,我就可以注入这两个实例(两个mock都是注入的,我在调试期间检查过了)。
public class ServiceUser {
@Inject
@Any
private Instance<Service> serviceImplementations;
@EJB
private Service firstImpl;
@EJB
private Service secondImpl;
public void work() {
serviceImplementations.forEach(service -> service.doService());
}
}我怎么才能让它工作呢?
发布于 2016-05-03 01:50:26
令人惊讶的是,就像在Instance<Service> serviceInstance = TestingInstance.of(firstImpl, secondImpl);中一样,我找不到一个好的现有的Instance<T>的伪或测试替身。
您可能想创建一个-不使用Mockito,而是作为一个实际的实现-并测试和使用它。该接口相对较小,特别是如果您只是在select方法上抛出UnsupportedOperationException,那么您将拥有一个可以在所有测试用例中使用的实现。
因为它不是mock,所以您需要@InjectMocks的替代品;考虑到@InjectMocks在依赖项更改时的脆弱性,这可能不是一件坏事。
https://stackoverflow.com/questions/36984805
复制相似问题