首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何做像Assertions.assertAllFalse()这样的事情?

如何做像Assertions.assertAllFalse()这样的事情?
EN

Stack Overflow用户
提问于 2020-12-18 20:45:12
回答 3查看 38关注 0票数 0

我正在使用import static org.junit.jupiter.api.Assertions.*;进行单元测试,如果很多项是假的,我必须对它们进行断言。例如:

代码语言:javascript
复制
boolean item1 = false;
boolean item2 = false;
boolean item3 = false;
boolean item4 = false;

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

我应该使用什么方法以及如何使用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-18 20:49:19

根据您的值的数量,最简单的(IMHO)是简单地将其写出为逻辑表达式:

代码语言:javascript
复制
Assertions.assertThat(item1 || item2 || item3 || item4).isFalse();
Assertions.assertThat(!(item1 && item2 && item3 && item4)).isTrue();

如果其中一个布尔值为true,则测试将失败。

或者,如果您事先不知道值的数量,iterable and array assertions可能会有所帮助:

代码语言:javascript
复制
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 streams来表达您的期望:

代码语言:javascript
复制
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();
票数 2
EN

Stack Overflow用户

发布于 2020-12-18 20:58:38

为此,您可以实现自己的方法:

代码语言:javascript
复制
@Test
public void test(){
  assertAllFalse(true, true, false);
}

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

Stack Overflow用户

发布于 2020-12-18 20:49:13

您可以使用assertFalse(item1 || item2 || item3 || item4)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65357308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档