我正在测试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)
答案 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);