Как сделать что-то вроде Assertions.assertAllFalse()?

Я использую import static org.junit.jupiter.api.Assertions.*; для модульного тестирования, и я должен утверждать для многих элементов, если они ложны. Например:

boolean item1 = false;
boolean item2 = false;
boolean item3 = false;
boolean item4 = false;

// is something like this possible
Assertions.assertAllFalse(item1, item2, item3, item4);

Какой метод следует использовать и как?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
114
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать assertFalse(item1 || item2 || item3 || item4).

@Abel de Bruijn: Рад слышать! :) Спасибо за ответ! Не стесняйтесь пометить один из ответов как принятый, см. stackoverflow.com/help/someone-answers

Kaj Hejer 18.12.2020 13:53
Ответ принят как подходящий

В зависимости от количества ваших значений проще всего (ИМХО) просто записать его как логическое выражение:

Assertions.assertThat(item1 || item2 || item3 || item4).isFalse();
Assertions.assertThat(!(item1 && item2 && item3 && item4)).isTrue();

Если одно из ваших логических значений истинно, тест не пройден.

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

final List<Boolean> bools = …; // e.g. List.of(item1, item2, item3, item4)
Assertions.assertThat(bools).containsOnly(false);
Assertions.assertThat(bools).doesNotContain(true);
Assertions.assertThat(bools).allMatch(b -> !b);
Assertions.assertThat(bools).noneMatch(b -> b);

Или вы можете даже использовать простые потоки Java, чтобы выразить свои ожидания:

final List<Boolean> bools = …; // e.g. List.of(item1, item2, item3, item4)
Assertions.assertThat(bools.stream().filter(b -> b).count()).isEqualTo(0);
Assertions.assertThat(bools.stream().allMatch(b -> !b)).isTrue();

Вы можете реализовать свой собственный метод для этого:

@Test
public void test(){
  assertAllFalse(true, true, false);
}

public void assertAllFalse(Boolean... conditions){
  List.of(conditions).forEach(Assert::assertFalse);
}

Другие вопросы по теме