我有一个class
class SearchCriteria
{
someEnum with values like "A","B"
int id;
}
我想用一个方法模拟一个委托
class Delegate
{
int getSomeStuff(SearchCriteria search)
{
//call dao and return count
}
}
如何使用Mock传递搜索条件
Delegate mock;
when(mock.getSomeStuff(??))thenReturn(5);
对于搜索条件的不同用例,我希望返回不同的值
所以如果enum在SearchCriteria被设置为A然后返回0,在B然后返回1…等
如何实现?
你可以这样做:
when(mock.getSomeStuff(CriteriaA)).thenReturn(0);
when(mock.getSomeStuff(CriteriaB)).thenReturn(1);
另一种方法是提供一个方法,在调用mock时执行,使用以下结构:
when(mock.getSomeStuff(any(Criteria.class))).thenAnswer(new Answer<Integer>{
@Override
public Integer answer(InvocationOnMock invocation) throws Throwable {
// inspect args in invocation and return
// ...
}
});
允许您执行更复杂的响应。
如果您需要检查参数,那么您可以使用假实现,如:
Delegate mock = new Delegate() {
public int getSomeStuff(SearchCriteria search) {
// Check search param
return 0;
}
};