列表的 Hamcrest 匹配器<Set<String>>

Hamcrest matchers for a List<Set<String>>

我正在尝试为 returns

的方法编写 JUnit 测试
List<Set<String>> result = build(List<Account> accounts, List<Order> orders);

我可以用

检查我是否有预期的条目数
assertThat(result, hasSize(2));

但我正在努力寻找关于如何编写断言的明确文档,该断言列表包含一个集合大小为 2 的条目和一个集合大小为 4 的条目。如果有人可以指出相关的我需要阅读的文档,我将不胜感激

我不记得 Hamcrest 有针对此特定设置的任何内容。

我只测试其中一组的大小,然后确保总和为 6

使用 hamcrest-2.2.jar from hamcrest.orgJUnit4 这在第三个 assertThat 中失败,因为我故意将其创建为预期值为 5 的失败。设置为时测试报告没有失败6:

import static org.hamcrest.Matchers.*;
import static org.hamcrest.MatcherAssert.assertThat;

import org.junit.Test;

import java.util.List;
import java.util.Set;

public class MyListTest {

  @Test
  public void listSize() {
    MyList tester = new MyList();
    List<Set<String>> result = tester.generate();

    // assert statements
    assertThat(result, hasSize(2));                                        // yours
    assertThat(result.get(0), anyOf(hasSize(2), hasSize(4)));              // is either 2 or 4
    assertThat((result.get(0).size() + result.get(1).size()), equalTo(5)); // sum must be 6. FAILS with 5 :)
  }
}

已测试class:

import java.util.List;
import java.util.Set;

public class MyList {
  public List<Set<String>> generate() {
    Set<String> s1 = Set.of("Hello", "World");
    Set<String> s2 = Set.of("Testing", "One", "Two", "Three");
    return List.of(s1,s2);
  }
}