我有:
@Test
public void testSomethingInFooFunction() {
//given
Something parameter = new Something();
//when
List<Object> result = foo(parameter);
//then
// not working
assertThat(result).isEmpty().or().containsOnly(something());
assertThat(result).is(v -> v.isEmpty() || v.containsOnly(something());
//is working
assertThat(result.isEmpty() || (
result.contains(something())
&& result.size() == 1)
).isTrue();
}
还有其他测试条件的方法吗?
result.isEmpty()|| (result.contains(something())&& result.size()== 1)
问:如何使用AssertJ 3.11.1简化它?
答案 0 :(得分:5)
该测试应满足您的需求:
@Test
public void test() {
List<Integer> integers = Collections.singletonList(1);
assertThat(integers)
.has(Assertions.anyOf(
new Condition<>(List::isEmpty, "List is empty"),
new Condition<>(list -> list.size() == 1 && list.contains(1), "List contains only number 1")
));
}
编辑:您也可以allOf
代替第二个条件:
AllOf.allOf(
new Condition<>(list -> list.size() == 1, "List has size 1"),
new Condition<>(list -> list.contains(1), "List contains number 1")
)
编辑2:或将其与所需列表进行比较:
new Condition<>(list -> Collections.singletonList(1).equals(list), "the list is equal to a list of the number 1")
答案 1 :(得分:2)
您要寻找的内容将在下一个版本中发布:https://github.com/joel-costigliola/assertj-core/issues/1304。
assertThat("foo").satisfiesAnyOf(actual -> assertThat(actual).contains("foo"),
actual -> assertThat(actual).isEmpty());
同时,最好的选择是使用Ondra K或您的建议中的anyOf
。