0

これに似たvoidメソッドがあります

public void handle(MyObject myObject) {
   Set<String> mySet = new HashSet<String>();
   mySet.addAll(myObject.getStuff();

   ...

   mySet.addAll(someOtherList);

   ...

   myService.doSomething(mySet);
}

モッキートを使用しています。私は 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] であったため、検証に失敗しました。したがって、内容は同じですが、正しい順序ではありません。

順序を維持するために使用されているコレクションを変更せずに、内容が同じであることを確認するにはどうすればよいですか?

4

1 に答える 1

2

例を単純化しすぎたのだろうか?順序に関係なく、同じオブジェクトが含まれている場合、 2 つの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);
}
于 2013-06-07T14:17:19.853 に答える