返回存根对象的集合

时间:2013-09-23 12:52:55

标签: unit-testing mockito stubbing

我经常面对这样的事情

public void methodToTest() {

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

所以最后我需要模仿我的dependencyDao的预期结果来验证我在externalService上的行为,这对于通用值是否正常但是什么是模仿集合的“最干净”方式或者像我上面的例子中的列表?使用一个值创建HashSet<String>似乎不是正确的事情。

2 个答案:

答案 0 :(得分:4)

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

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

methodToTest();

verify(externalService).doSomethingWithName("name");

答案 1 :(得分:3)

不要试图模仿集合或任何其他类型的集合。嘲弄一个系列比它的价值更麻烦,因为很容易制作一个系列,可能还有嘲讽。

您可能希望确保方法正常工作,无论返回的集合是否为空。如果我正在测试这个,我会为每个案例都有一个测试方法。

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

但是这些都是“真正的”收藏品,而不是嘲笑。