我是使用mock框架的新手,我正在尝试添加一些新的测试用例
我有下面的类,我试图测试,我已经剥离了我的类到最低限度
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();
}
}
My Test class
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();
我有点困在这一点上,不知道我错过了什么-任何帮助都是感激的。
也请给我指出任何在线资源,以帮助我更好地了解。
我想你把PowerMock和EasyMock搞混了。
当您创建对象的模拟实例并设置期望并验证它们已经发生时,那么EasyMock可以自己使用。
PowerMock只需要在你想模拟的类/方法是final的、私有的或静态的情况下使用。在这些情况下,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的网站。它有很多关于如何使用EasyMock的文档和示例。
为了完整起见,这里还有PowerMock网站。虽然,在学习的过程中,我认为我暂时会避免使用PowerMock。