Collection<T_SI_IDABAREME> tSiIdabaremes;
DAO_F_IDA_DESC mockDaoFIdaDesc
prepareExpects(){
expect(mockDaoTSiIdabareme.findByDate(isA(Date.class)))
.andReturn(searchByParameter(tSiIdabaremes, date));
}
是否可以使用将传递给andReturn中的findByDate的日期?
PS:这是一个服务测试类,我试图绕过数据库。
答案 0 :(得分:1)
每当你使用像这样的期望方法时
Easymock.expect(someMethod(Date.Class)).andReturn(something);
当指示Date类的 ANY 对象作为参数传递时,您指示编译器模拟对该方法的所有调用,并且您将无法在返回表达式中使用该对象。
另一方面,如果你有这样的东西,
Easymock.expect(someMethod(someSpecificDateObject)).andReturn(someSpecificDateObject);
当指示Date类的特定对象作为参数(在本例中为someSpecificDateObject
)传递时,您指示编译器模拟此方法调用 ONLY ,并且您将能够使用此方法返回时的参数,因为您知道只有在传递此对象时才会模拟该方法。
如果对你有利,你可以使用第二个选项,但是第一个选项你不能提出要求。
希望这有帮助!
祝你好运!答案 1 :(得分:0)
而不是:
expect(mockDaoTSiIdabareme.findByDate(isA(Date.class)))
.andReturn(searchByParameter(tSiIdabaremes, date));
我应该放
expect(mockDaoTSiIdabareme.findByDate(isA(Date.class)))
.andAnswer(new IAnswer<Collection<T_SI_IDABAREME>>() {
public Collection<T_SI_IDABAREME> answer() throws Throwable {
return searchByParameter((Date)getCurrentArguments()[0]);
}
}
);
只有在方法被执行时才会查找返回值,然后我们可以使用getCurrentArguments()来检索传递给方法的参数。
您可以在EasyMock Documentation中找到更多相关信息。