模拟参数匹配器与多个参数

  • 本文关键字:参数 模拟 java mockito
  • 更新时间 :
  • 英文 :


我有一个类的方法:

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

希望这是清楚的…好运!

相关内容

  • 没有找到相关文章

最新更新