我有一个类的方法:
class URAction {
public List<URules> getUrules(Cond cond, Cat cat) {
...
}
}
我想创建它的模拟:
@Mock
URAction uraMock;
@Test
public void testSth() {
Cond cond1;
Cat cat1;
List<URule> uRules;
// pseudo code
// when uraMock's getUrules is called with cond1 and cat1
// then return uRules
}
问题是我可以让模拟只返回一个参数的规则:
when(uraMock.getUrules(argThat(
new ArgumentMatcher<Cond> () {
@Override
public boolean matches(Object argument) {
Cond cond = ((Cond) argument);
if (cond.getConditionKey().equals(cond1.getConditionKey())
return true;
return false;
}
}
))).thenReturn(uRules);
不确定如何在上面的when调用中传递第二个参数(即Cat)。
任何帮助都将是非常感激的。
谢谢
您可以尝试为第二个参数匹配器添加另一个argThat(argumentMatcher)吗?
另外,我发现最好不要将匿名类定义为方法,而不是像您所做的那样内联。然后您也可以将它用于verify()。
你的方法应该像这样
ArgumentMatcher<Cond> matcherOne(Cond cond1){
return new ArgumentMatcher<Cond> () {
@Override
public boolean matches(Object argument) {
Cond cond = ((Cond) argument);
if (cond.getConditionKey().equals(cond1.getConditionKey())
return true;
return false;
}
}
}
ArgumentMatcher<OtherParam> matcherTwo(OtherParam otherParam){
return new ArgumentMatcher<OtherParam> () {
@Override
public boolean matches(Object argument) {
OtherParam otherParam = ((OtherParam) argument);
if (<some logic>)
return true;
return false;
}
}
}
然后你可以像这样调用你的方法,
when(uraMock.getUrules(argThat(matcherOne(cond1)), argThat(matcherTwo(otherParam)))).thenReturn(uRules);
然后,像我一样你可以调用verify,来检查你的when方法是否真的被调用了
verify(uraMock).getUrules(argThat(matcherOne(cond1)), argThat(matcherTwo(otherParam)));
如果你不关心其他参数,你可以这样做,
when(uraMock.getUrules(argThat(matcherOne(cond1)), argThat(any()))).thenReturn(uRules);
详细信息请参见:http://site.mockito.org/mockito/docs/current/org/mockito/stubbing/Answer.html
希望这是清楚的…好运!