如果参数字段匹配,但参数对象不一定引用它们自己,我如何让Mockito返回数据



我使用的是Mockito 1.9.5、Maven 3.2.3和JUnit 4.11。我在JUnit测试中设置了以下内容。。。

    final Set<Account> accounts = new HashSet<Account>();
    final Account acct1 = new Account();
    acct1.setId(“id1”);
    accounts.add(acct1);
    …
    Mockito.doReturn(acctTeamMemberMap).when(m_accountTeamMemberDao).getManagers(accounts);

问题是,我在JUnit测试中创建的Account对象与我执行方法调用时实际作为参数传入的对象不同。我的问题是,当各种对象的ID字段与我在JUnit测试中的ID匹配时,我如何告诉Mockito返回结果?换句话说,如果上面的Account对象有id"id1"one_answers"id2",我希望Mockito总是返回结果,如果实际参数也有id"id1"one_answers"id2"。

谢谢,-Dave

您可以使用Mockito中的any()matcher,并且无论传递了什么值都只返回结果:

Mockito.doReturn(acctTeamMemberMap).when(any()).getManagers(accounts);

或者,您可以实现自己的匹配器,并检查传递的值是否遵循指定的约束:

class IsListOfTwoElements extends ArgumentMatcher<List> {
      public boolean matches(Object myDao) {
          String id =  ((MyDao) myDao).size().getId();
          return id.equals("id1") || id.equals("id2");
      }
   }

相关内容

  • 没有找到相关文章

最新更新