验证来自所有方法调用的Collection参数将一起包含来自给定集合的所有值

时间:2017-10-03 09:31:31

标签: java unit-testing mockito

我有一个类来测试来自其他类的调用方法,它接受一个集合。我想测试一下,对这个方法的所有调用都将包含我期望的所有值,但是调用的顺序和数量是无关的。

我已经在不使用mockito的情况下实现了它,但匿名类在这里困扰我:

@Test
public void test() {
    CubePos cubePos = new CubePos(0, 0, 0);

    Set<BlockPos> expected = new HashSet<>();
    BlockPos.getAllInBox(cubePos.getMinBlockPos(), cubePos.getMaxBlockPos()).forEach(expected::add);

    Set<BlockPos> actualPosSet = new HashSet<>();
    LightPropagator propagator = new LightPropagator() {
        @Override public void propagateLight(BlockPos centerPos, Iterable<BlockPos> coords, ILightBlockAccess blocks, EnumSkyBlock type,
                Consumer<BlockPos> setLightCallback) {
            coords.forEach(actualPosSet::add);
        }
    };

    FirstLightProcessor proc = makeProcessor(new TestLightBlockAccessImpl(20), propagator);
    proc.updateSkylightFor(cubePos);

    assertThat(actualPosSet, contains(expected));
}

(是的,代码与Minecraft有关,但问题不是特定的)

1 个答案:

答案 0 :(得分:2)

您可以使用pip中的verifyArgumentCaptor来检查传递给mockito的参数。

propagator.propagateLight()