我有一个班级
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 ...等等
我如何实现这一目标?
答案 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;
}
};