我正在使用easyMock进行JUnit测试。我想测试一个方法,该方法将Project对象作为其参数,并设置该项目的修改日期并将其保存在db中。
所以,例如。
public void setProject(Project project) {
project.setModifyDate(new Date());
this.reporsitory.persist(project);
}
现在按照我的测试方法,我有两个模拟项目。对于其中一个,我设置了getModifyDate的返回值。对于其他模拟项目对象,我只需调用setProject(mockedProject);现在我断言等于这两个项目对象。
问题是easymock在我测试的类的project.setModifyDate(new Date())中抛出了一个错误。
异常:意外的方法调用project.setModifyDate(..)..预期:1,实际:0。
似乎它不期望setter方法。能不能让我知道我做错了什么。
感谢。
答案 0 :(得分:3)
是的,这是因为您创建的模拟对象的类型。它希望您的代码在执行一个调用时调用您定义的每个方法。我不记得确切的名字,但我认为它是类似nicemock的东西,而strictmock whick使你的代码执行每个预期的方法。您应该为模拟对象使用EasyMock.createNiceMock()。您遇到的错误是因为它希望您调用setModifyDate,但您的代码不适用于该调用。
您的通话是意料之外的,因为您必须没有为该方法安装EasyMock.expected。你需要添加你的模拟对象.expected(getMethod).andReturns(something)。