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);
}