Mockito - 无法实例化@InjectMocks
Mockito - Cannot instantiate @InjectMocks
我正在测试的 class 中有两个私有字段,这两个字段在构造函数中初始化。
现在,当我尝试使用带有 @InjectMocks 注释的 class 进行调用时,它抛出异常:
Cannot instantiate @InjectMocks field named 'ServiceImpl' of type 'class com.test.ServiceImpl'. You haven't provided the instance at field declaration so I tried to construct the instance.
下面是一段代码。
public class ServiceImpl implements Service {
private OfficeDAO officeDAO ;
private DBDAO dbDAO ;
public ServiceImpl() {
officeDAO = Client.getDaoFactory().getOfficeDAO();
dbDAO = Client.getDaoFactory().getDBDAO();
}
我的测试class:
@RunWith(MockitoJUnitRunner.class)
public class ServiceImplTest {
@Mock
private OfficeDAO officeDAO;
@Mock
private DBDAO dbDAO;
@Mock
Client client;
@InjectMocks
private ServiceImpl serviceImpl;
@Mock
private Logger log;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
请帮我解决一下。
任何帮助将不胜感激。
您正在使用 @InjectMocks
注释,它创建了 ServiceImpl
class 的实例。因为你的构造函数正试图从工厂获得实现:Client.getDaoFactory().getOfficeDAO()
你有 NPE。
确保 Client.getDaoFactory()
返回的是什么。我敢打赌 returns null,这就是问题所在 :) 重构您的代码,以便通过参数而不是使用静态传递 DaoFactory。
我看到你现在有一个不同的例外。但是根据代码,我真的不能说得更多。请提供失败测试的完整示例。
我正在测试的 class 中有两个私有字段,这两个字段在构造函数中初始化。
现在,当我尝试使用带有 @InjectMocks 注释的 class 进行调用时,它抛出异常:
Cannot instantiate @InjectMocks field named 'ServiceImpl' of type 'class com.test.ServiceImpl'. You haven't provided the instance at field declaration so I tried to construct the instance.
下面是一段代码。
public class ServiceImpl implements Service {
private OfficeDAO officeDAO ;
private DBDAO dbDAO ;
public ServiceImpl() {
officeDAO = Client.getDaoFactory().getOfficeDAO();
dbDAO = Client.getDaoFactory().getDBDAO();
}
我的测试class:
@RunWith(MockitoJUnitRunner.class)
public class ServiceImplTest {
@Mock
private OfficeDAO officeDAO;
@Mock
private DBDAO dbDAO;
@Mock
Client client;
@InjectMocks
private ServiceImpl serviceImpl;
@Mock
private Logger log;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
请帮我解决一下。 任何帮助将不胜感激。
您正在使用 @InjectMocks
注释,它创建了 ServiceImpl
class 的实例。因为你的构造函数正试图从工厂获得实现:Client.getDaoFactory().getOfficeDAO()
你有 NPE。
确保 Client.getDaoFactory()
返回的是什么。我敢打赌 returns null,这就是问题所在 :) 重构您的代码,以便通过参数而不是使用静态传递 DaoFactory。
我看到你现在有一个不同的例外。但是根据代码,我真的不能说得更多。请提供失败测试的完整示例。