在andReturn中使用expect的方法参数

Use the method parameters of expect in the andReturn

Collection<T_SI_IDABAREME> tSiIdabaremes;
DAO_F_IDA_DESC mockDaoFIdaDesc

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

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

PS:这是一个服务测试class,我正在以绕过数据库的方式进行。

每当你像这样使用 expect 方法时

Easymock.expect(someMethod(Date.Class)).andReturn(something);

你指示编译器模拟所有调用该方法的方法,只要 任何 日期 class 的对象作为参数传递,你将无法使用它return 表达式中的对象。

另一方面,如果你有这样的事情,

Easymock.expect(someMethod(someSpecificDateObject)).andReturn(someSpecificDateObject);

您正在指示编译器模拟此方法调用 仅当 class 的特定对象作为参数传递时 (在本例中为 someSpecificDateObject ) 并且您将能够在 returning 时使用此参数,因为您知道该方法仅在传递此对象时才会被模拟。

如果对您有利,您可以使用第二个选项,但是第一个选项不能满足您的要求。

希望对您有所帮助!

祝你好运!

而不是:

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

它只会在执行方法时查找 return 值,然后我们可以使用 getCurrentArguments() 检索传递给该方法的参数。

您可以在 EasyMock Documentation 中找到更多相关信息。