在andReturn中使用expect的方法参数

时间:2015-03-04 17:02:54

标签: java junit easymock

Collection<T_SI_IDABAREME> tSiIdabaremes;
DAO_F_IDA_DESC mockDaoFIdaDesc

prepareExpects(){
     expect(mockDaoTSiIdabareme.findByDate(isA(Date.class)))
          .andReturn(searchByParameter(tSiIdabaremes, date));
}

是否可以使用将传递给andReturn中的findByDate的日期

PS:这是一个服务测试类,我试图绕过数据库。

2 个答案:

答案 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中找到更多相关信息。