Unit testing easymock始终返回NPE
我是一个使用模拟框架的新手,我正在尝试添加一些新的测试用例 我试着测试下面的课程,我把我的课程精简到最低限度Unit testing easymock始终返回NPE,unit-testing,testing,easymock,powermock,Unit Testing,Testing,Easymock,Powermock,我是一个使用模拟框架的新手,我正在尝试添加一些新的测试用例 我试着测试下面的课程,我把我的课程精简到最低限度 public class LanguageMapping { protected Map<String, String> languageMapping; public Map<String, String> getLanguageMapping() { return languageMapping; } pu
public class LanguageMapping {
protected Map<String, String> languageMapping;
public Map<String, String> getLanguageMapping() {
return languageMapping;
}
public void updated(Dictionary properties) throws ConfigurationException {
languageMapping = new HashMap<String, String>();
String mappingPath = properties.get(
SealMappingServiceConstants.SEAL_MAPPING_PATH).toString();
}
}
不管我做什么,Easy mock总是在我测试的类的下一行指示NullPointerException
String mappingPath = properties.get(
Constants.SEAL_MAPPING_PATH).toString();
我被困在这一点上,不知道我错过了什么-任何帮助都是感激的
另外,请向我指出任何在线资源,以帮助我更好地理解。我认为你混淆了PowerMock和EasyMock 当您创建对象的模拟实例并设置期望值并验证它们是否发生时,EasyMock可以自己使用 仅当要模拟的类/方法是final、private或static时,才需要使用PowerMock。在这些情况下,PowerMock提供了EasyMock没有的额外功能 因此,看看您的测试类,我发现您已经使用EasyMock创建了模拟,然后使用EasyMock设置了期望值,但随后尝试使用PowerMock重播模拟。这行不通 最终发生的情况是,您的模拟对象仍处于记录模式,因此将默认值返回给对其进行的任何方法调用。在方法返回对象的情况下,默认值为null,因此您的NPE为空 我已将您的测试方法更改为使用EasyMock.replay方法,它对我来说运行良好:
@Test
public void testGetLanguageMapping() throws ConfigurationException {
final LanguageMapping mappingService = new LanguageMapping();
EasyMock.expect(this.properties.get(SealMappingServiceConstants.SEAL_MAPPING_PATH)).andReturn(this.object);
EasyMock.replay(this.properties);
mappingService.updated(this.properties);
EasyMock.verify(this.properties);
}
另外,请记住验证您的模拟,以确保发生了预期的行为
当然,您以前会看到这一点,但是它有很多关于如何使用EasyMock的文档和示例
为了完整性,尽管在学习过程中,我认为我暂时应该避免使用PowerMock。任何想法,我仍然会遇到这个问题。
@Test
public void testGetLanguageMapping() throws ConfigurationException {
final LanguageMapping mappingService = new LanguageMapping();
EasyMock.expect(this.properties.get(SealMappingServiceConstants.SEAL_MAPPING_PATH)).andReturn(this.object);
EasyMock.replay(this.properties);
mappingService.updated(this.properties);
EasyMock.verify(this.properties);
}