0

我经常遇到这样的事情

public void methodToTest() {

    Set<String> names = dependencyDao.getNamesFromExternalDataSource();
    for (String name : names) {
        externalService.doSomethingWithName(name);
        //....
    }
}

所以最后我需要模拟我的预期结果dependencyDao来验证我的行为,externalService这在通用值上很好,但是像我上面的示例中那样模拟 Set 或 List 的“最干净”的方法是什么?在这里创建HashSet<String>一个值似乎不是正确的事情。

4

2 回答 2

4

用一个值创建一个Set<String>正是我会做的。

when(dependencyDao.getNamesFromExternalDataSource())
        .thenReturn(Collections.singleton("name"));

methodToTest();

verify(externalService).doSomethingWithName("name");
于 2013-09-23T17:15:42.890 回答
3

不要试图嘲笑这个系列或任何其他类型的集合。模拟一个集合比它的价值要麻烦得多,当很容易制作一个集合时,可能里面有模拟。

您可能希望确保无论返回的集合是否为空,该方法都能正常工作。如果我要对此进行测试,我将对每种情况都有一个测试方法。

  • 返回的集合为空。
  • 返回的集合有很多元素——三个可能就足够了。
  • 返回的集合是一个单例。

但这些都将是“真实的”集合,而不是模拟。

于 2013-09-23T19:42:33.123 回答