如何断言某个String包含列表<string>中的至少一个值?

时间:2019-04-06 14:25:15

标签: java testing assertion assertj

我正在测试Java和AssertJ的一些UI功能。 因此,当我从UI收到一些庞大的字符串时,我应该验证String是否包含来自List<String>的至少一个预定义值。 做相反的事情很容易-验证list是否至少包含一次某个String值,但这不是我的情况。 我找不到标准方法中的解决方案。

public static final List<String> OPTIONS = Arrays.asList("Foo", "Bar", "Baz");

String text = "Just some random text with bar";

我需要的是这样的:

Assertions.assertThat(text)
                .as("Should contain at least one value from OPTIONS ")
                .containsAnyOf(OPTIONS)

3 个答案:

答案 0 :(得分:3)

//Step 1: wrap the entire affected argument pack in parenthesis
#define mFn(A, ExpandingArgument) mFn1((A, ExpandingArgument))

//Step 2: intermediary layer without ## or # is required to actually expand
#define mFn1(...) mFn2(__VA_ARGS__)

//Step3: Paste the parenthesized arguments to final function identifier to trigger 
//       function like macro interpretation and invocation
#define mFn2(...) mFn3##__VA_ARGS__

//Step4: Implement the actual function as if the standard were written correctly
#define mFn3(A,B,C,...) //Do things

答案 1 :(得分:2)

您还可以尝试使用Condition和AssertJ断言,例如areAtLeastOne(),areAtLeast(),例如:

assertThat(OPTIONS)
.areAtLeastOne(new Condition<>(text::contains,
                                String.format("Error message '%s'", args);

答案 2 :(得分:0)

另一个使用AssertJ

的选项
assertThat(text.split(" ")).containsAnyElementsOf(OPTIONS);