我有一个与此类似的 void 方法
public void handle(MyObject myObject) {
Set<String> mySet = new HashSet<String>();
mySet.addAll(myObject.getStuff();
...
mySet.addAll(someOtherList);
...
myService.doSomething(mySet);
}
我正在使用 Mockito。我已经 mock 了 myService 并且正在验证 myService.doSomething(mySet) 是否被任何 Set 调用,如下所示:
verify(myService).doSomething(any(Set.class));
但我想验证该集合的预期内容。我尝试过这样的事情:
Set<String> expected = new HashSet<String>();
expected.add("item1");
expected.add("item2");
verify(myService).doSomething(expected);
此验证失败,因为由于“参数不同”,预期为 [item1,item2],而实际为 [item2,item1]。所以内容是相同的,但顺序不正确。
如何在不更改用于维护顺序的集合的情况下检查内容是否相同?
最佳答案
我想知道你的例子是否过于简化了?只要两个 Set
实例包含相同的对象,无论顺序如何,它们都是相等的。
请参阅下面的示例测试,该测试通过了。
@Test
public void test() throws Exception {
Foo foo = mock(Foo.class);
Set<String> set = new HashSet<>();
set.add("a");
set.add("b");
foo.doSomething(set);
Set<String> set2 = new HashSet<>();
set2.add("b");
set2.add("a");
verify(foo).doSomething(set2);
}
public interface Foo {
void doSomething(Set<String> strings);
}
关于java - 在对 void 方法进行单元测试时,如何确定集合中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16985986/