如何断言列表中的模拟对象

How to assert a mocked object in a list

我有一个 Junit 测试如下:

ClassA a1 = mock(ClassA.class);
ClassB b1 = new B("1", "abcd1");
testClass.addToMap(b1, a1); //add date to map1
ClassA a2 = mock(ClassA.class);
ClassB b2 = new B("2", "abcd2");
testClass.addToMap(b2, a2); //add date to map1
testClass.dropFromMap(); //this will remove the object from map1 and add the ClassA details to a set(set1)

现在的问题是如何验证 set1 包含模拟的 objects(a1, a2)。如下所示:

assertTrue(testClass.set1.contains(a1));
assertTrue(testClass.set1.contains(a2));

无法使用 ArgumentCaptor,因为我应该在添加到地图时提供适当的 b1 对象。

如果您想在单个 line/statement 中验证,我会选择 Hamcrest 匹配器:

import static org.hamcrest.Matchers.*;

...

testClass.dropFromMap();
assertThat(testClass.set1, containsInAnyOrder(a1, a2));

这将确保只有这两个在集合中。