我正在使用AssertJ,需要检查列表中的所有对象是否具有intField > 0
。像这样:
assertThat(myObjectList).extracting(p -> p.getIntField()).isGreaterThan(0);
实现此目标的正确方法是什么?我应该使用其他图书馆吗?
答案 0 :(得分:2)
似乎图书馆没有提供断言您描述的方式的选项(即使AbstractIntArrayAssert
也不允许这样做),但是您可以:
1)使用AbstractIterableAssert#allMatch(Predicate)
assertThat(asList(0, 2, 3))
.allMatch(i -> i > 0);
2)如果您确实想在isGreaterThan
上使用类似ListAssert
的东西,则可以创建自定义ListAssert
:
public class CustomListAssert<E> extends ListAssert<E> {
public static <E> CustomListAssert<E> assertThat(List<E> list) {
return new CustomListAssert<>(list);
}
public CustomListAssert(List<? extends E> actual) {
super(actual);
}
public IntListAssert extractingInt(ToIntFunction<E> mapper) {
return new IntListAssert(actual.stream()
.mapToInt(mapper).boxed().collect(toList()));
}
}
public class IntListAssert extends ListAssert<Integer> {
public IntListAssert(List<Integer> actual) {
super(actual);
}
public IntListAssert allGreaterThan(int i) {
allMatch(n -> n > i);
return this;
}
}
并像这样使用它:
@Test
public void test() {
CustomListAssert.assertThat(asList(0, 2, 3))
.extractingInt(i -> i * 2)
.allGreaterThan(0);
}
我的情况如下:
java.lang.AssertionError:
Expecting all elements of:
<[0, 4, 6]>
to match given predicate but this element did not:
<0>