我是使用模拟框架的新手,我正在尝试添加一些新的测试用例
我有以下课程,我正在尝试测试,我已经将我的班级剥离到最低限度
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();
}
}
我的测试课
public class LanguageMappingTest {
Dictionary properties;
Object object;
@Before
public void setUp(){
properties = EasyMock.createMock(Hashtable.class);
object = new String("/etc/language-mapping");
}
@Test
public void testGetLanguageMapping() throws ConfigurationException{
LanguageMapping mappingService = new LanguageMapping();
EasyMock.expect(properties.get(Constants.SEAL_MAPPING_PATH)).andReturn(object);
//EasyMock.expect(object.toString()).andReturn("/etc/language-mapping");
PowerMock.replayAll();
mappingService.updated(properties);
//assertNotNull(mappingService.getLanguageMapping());
}
无论我做什么,Easy mock总是在我正在测试的类的下一行指示NullPointerException。
String mappingPath = properties.get(
Constants.SEAL_MAPPING_PATH).toString();
我有点陷入困境,不知道我错过了什么 - 感谢任何帮助。
另请指出我在线的任何资源,以帮助我获得更好的理解。
答案 0 :(得分:0)
我认为你让PowerMock和EasyMock感到困惑。
当您创建对象的模拟实例并设置期望并验证它们已经发生时,EasyMock可以单独使用。
只有在您要模拟的类/方法是final,private或static时才需要使用PowerMock。在这些情况下,PowerMock提供EasyMock不具备的额外功能。
所以看看你的测试类,我看到你使用EasyMock创建了你的模拟,然后使用EasyMock设置你的期望,但后来尝试使用PowerMock重放模拟。这不会奏效。
最终发生的事情是你的模拟对象仍处于&#34;记录模式&#34;因此,将默认值返回给它上面的任何方法调用。在返回对象的方法的情况下,默认值为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);
}
请注意,请记住验证您的模拟以确保已发生预期的行为。
当然,您之前已经看过这个,但是here is the EasyMock website.它有很多关于如何使用EasyMock的文档和示例。
为了完整性,here also is the PowerMock website.虽然在学习的同时,我想我暂时会避免使用PowerMock。