Hamcrest matchers для Списка - PullRequest
       49

Hamcrest matchers для Списка

0 голосов
/ 17 февраля 2020

Я пытаюсь написать тест JUnit для метода, который возвращает

List<Set<String>> result = build(List<Account> accounts, List<Order> orders);

Я могу проверить, что у меня есть ожидаемое количество записей с

assertThat(result, hasSize(2));

Но я пытаясь найти четкую документацию о том, как написать утверждение о том, что список содержит одну запись с заданным размером 2 и одну запись с заданным размером 4. Если бы кто-то мог указать мне соответствующую документацию, которую мне нужно прочитать, я бы будь благодарен

1 Ответ

0 голосов
/ 17 февраля 2020

Я не помню, чтобы у Hamcrest было что-то для этой конкретной установки.

Я бы просто проверил один из наборов на размер и затем убедился бы, что сумма равна 6

Используя hamcrest -2.2.jar из hamcrest.org и JUnit4 это не удается в 3-м 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 :)
  }
}

Проверенный класс:

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);
  }
}
...