如何将参数传递给模拟对象

时间:2014-06-04 08:53:09

标签: java mockito

我有一个班级

class SearchCriteria
{  
    someEnum with values like "A","B"
    int id;
} 

我想用一种方法模拟一个Delgeate

class Delegate 
{
    int getSomeStuff(SearchCriteria search) 
    { 
         //call dao and return count   
    }    
}

如何使用Mock传递SearchCriteria

Delegate mock; 
when(mock.getSomeStuff(??))thenReturn(5); 

这里针对SearchCriteria的不同用例,我希望返回不同的值

因此,如果SearchCriteria中的枚举设置为A然后返回0并且B中则返回1 ...等等

我如何实现这一目标?

2 个答案:

答案 0 :(得分:3)

你可以这样做:

when(mock.getSomeStuff(CriteriaA)).thenReturn(0);   
when(mock.getSomeStuff(CriteriaB)).thenReturn(1);

使用此结构调用mock时,另一种方法是provide a method to be executed

   when(mock.getSomeStuff(any(Criteria.class))).thenAnswer(new Answer<Integer>{
        @Override
        public Integer answer(InvocationOnMock invocation) throws Throwable {
           // inspect args in invocation and return
           // ...
        }
   });

允许您执行更复杂的响应。

并检查所提供的论据。

答案 1 :(得分:0)

如果您需要检查参数,那么您可以使用虚假实现,例如:

Delegate mock = new Delegate() {
    public int getSomeStuff(SearchCriteria search) {
        // Check search param
        return 0;
    }
};