如何在assertj中验证元素是其中之一

eja*_*env 3 assertj

我找不到如何使用 assertj 检查以下内容(这很常见):

假设我有:

 result1 = {"AAA", "BBB"}
 result2 = {"DDD"}
Run Code Online (Sandbox Code Playgroud)

我想检查结果中的值是以下之一:

String[] valid = String[]{"AAA", "BBB", "CCC"};
Run Code Online (Sandbox Code Playgroud)

使用assertj,应该是这样的:

assertThat(result1).xxxx(valid);
assertThat(result2).xxxx(valid);
Run Code Online (Sandbox Code Playgroud)

这样 result1 会通过检查,但 result2 不会。

contains() 不起作用(它检查结果是否包含所有有效元素)

我不想为这种检查创建自定义条件

任何想法?

Jan*_*rek 5

你可以反过来写:

assertThat(valid).contains(result1);
assertThat(valid).contains(result2);
Run Code Online (Sandbox Code Playgroud)

如果你坚持让结果在左边,在右边有效,你可以使用:

assertThat(result1).isSubsetOf(Arrays.asList(valid));
assertThat(result2).isSubsetOf(Arrays.asList(valid));
Run Code Online (Sandbox Code Playgroud)

或者,为什么不将valid定义为集合而不是数组?

Set<String> valid = Sets.newHashSet("AAA", "BBB", "CCC"); //Sets comes from google guava
assertThat(result1).isSubsetOf(valid);
assertThat(result2).isSubsetOf(valid);
Run Code Online (Sandbox Code Playgroud)

  • 我同意,请参阅http://joel-costigliola.github.io/assertj/core-8/api/org/assertj/core/api/AbstractIterableAssert.html#isSubsetOf-java.lang.Iterable-缺少的是可能性为了在 isSubsetOf 中传递数组/varargs,我为此创建了一个问题(https://github.com/joel-costigliola/assertj-core/issues/548) (2认同)