Как использовать Or с JUnit - PullRequest
0 голосов
/ 25 июня 2019

В тестовом примере jUnit я пытаюсь использовать Assume, который проверит, является ли условие истинным ИЛИ, если другое условие истинно.Однако jUnit эффективно остановит тест, как только будет выполнено одно условие.

В примере, приведенном ниже, я пытаюсь запустить тест, если причина равна нулю ИЛИ, если enumValue находится в EnumSet allowReasons..

EnumSet не допустит пустое значение в своих членах, и я хотел бы придерживаться EnumSet, чтобы имитировать то, что фактический класс использует для проверки его причины.

  @RunWith(Parameterized.class)
  public static class AllowedExclusionsTest
  {

    @Parameters
    public static Iterable<EntitlementReason> data()
    {
      final List<EntitlementReason> data = new ArrayList<>();
      data.addAll(Arrays.asList(EntitlementReason.values()));
      data.add(null);
      return data;
    }

    @Parameter(0)
    public EntitlementReason reason;

    private final Set<EntitlementReason> allowedReasons =
        EnumSet.of(EntitlementReason.INCARCERATED, EntitlementReason.ABSENT_FROM_CANADA);

    @Test
    public void testAllowedExclusionReason()
    {
      Assume.assumeThat(reason, Matchers.isIn(allowedReasons));
      Assume.assumeThat(reason, Matchers.nullValue());
      final ExcludedPeriodFact test = new ExcludedPeriodFact();
      test.setExclusionReason(reason);
      Assert.assertEquals("getExclusionReason()", reason, test.getExclusionReason());
    }
  }

1 Ответ

2 голосов
/ 25 июня 2019

Оказывается, что с помощью Matcher anyOf сделает именно это.

@Test
public void testAllowedExclusionReason()
{
  Assume.assumeThat(reason, Matchers.anyOf(Matchers.nullValue(), Matchers.isIn(allowedReasons)));
  final ExcludedPeriodFact test = new ExcludedPeriodFact();
  test.setExclusionReason(reason);
  Assert.assertEquals("getExclusionReason()", reason, test.getExclusionReason());
}
...