【发布时间】:2017-12-27 12:27:12
【问题描述】:
我在测试用例中使用 Junit4 和 Mockito,在下面的代码中,我试图模拟一个自动装配的对象,它在模拟类中抛出空指针异常,这意味着自动装配的对象没有正确模拟
ContentDao.java
public class ContentDao {
@Autowired
private ConfigProperties configProperties;
public void fuction() {
int batchSize = configProperties.getBatchSize();
}
ConfigProperties.java
@ConfigurationProperties(ignoreUnknownFields = false, prefix = "cleanup")
public class ConfigProperties {
private int batchSize;
public int getBatchSize() {
return batchSize;
}
}
试图模拟 ConfigProperties。
@RunWith(MockitoJUnitRunner.class)
public class ContentDaoTest{
@InjectMocks
private ContentDao contentDao;
@Mock
private ConfigProperties configProperties;
@Test
public void functionTest(){
configProperties = mock(ConfigProperties.class);
when(configProperties.getBatchSize()).thenReturn(100);
ContentDao contentDao = new ContentDao();
contentDao.funtion();
}
函数被调用,但我在下面的行中得到 NPE。请帮助我被困在这里。
int batchSize = configProperties.getBatchSize();
【问题讨论】:
-
当然你会得到一个
NullPointer... 你正在用new ContentDao()的模拟引用破坏实例。 -
您需要在 ContentDao 类中注入或设置属性。操作...好吧,你已经做到了。尝试将@mock ConfigProperties 移到@injectMocks 上方
-
尝试在 autowired 中声明“private MockMvc mockMvc;”。
-
@M.Deinum:那我应该删除'new ContentDao()'并从注入的'contentDao'调用函数吗?
-
你认为
@InjectMocks做了什么...这会给你一个实例。
标签: java junit mockito junit4 powermock