在单元测试中使用 AssertJ,我想从此类对象的列表中提取自定义对象的多个属性,extracting并检查它们是否全部非空。
例如,假设我想提取fieldA和:fieldBMyObject
import static from org.assertj.core.api.Assertions.assertThat;
List<MyObject> theList = ...;
assertThat(theList).extracting("fieldA", "fieldB")).isNotNull();
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚正在检查的内容。
正在isNotNull检查:
extracting不为空?按照你的例子:
assertThat(theList).extracting("fieldA", "fieldB").isNotNull();
Run Code Online (Sandbox Code Playgroud)
isNotNull只检查Iterable返回的元组extracting不为空。
flatExtracting+doesNotContainNull要检查提取的值是否都不为空,您可以使用flatExtractingand doesNotContainNull:
assertThat(theList).flatExtracting("fieldA", "fieldB").doesNotContainNull();
Run Code Online (Sandbox Code Playgroud)
如果发生故障,会产生如下消息:
java.lang.AssertionError:
Expecting actual:
["value1", "value2", null, "value4"]
not to contain null elements
Run Code Online (Sandbox Code Playgroud)
由于解决方案的扁平化性质,没有指示哪个对象导致了故障,但可以通过计算显示的对来识别actual。
extracting+noneMatch可以增加复杂性以获得更清晰的错误消息:
assertThat(theList).extracting("fieldA", "fieldB").noneMatch(tuple -> tuple.toList().contains(null));
Run Code Online (Sandbox Code Playgroud)
失败时会产生:
java.lang.AssertionError: [Extracted: fieldA, fieldB]
Expecting no elements of:
[("value1", "value2"), (null, "value4")]
to match given predicate but this element did:
(null, "value4")
Run Code Online (Sandbox Code Playgroud)
extracting+ allSatisfy+doesNotContainNull更清晰的错误消息的另一种选择:
assertThat(theList).extracting("fieldA", "fieldB").allSatisfy(tuple -> assertThat(tuple.toList()).doesNotContainNull());
Run Code Online (Sandbox Code Playgroud)
失败时会产生:
java.lang.AssertionError: [Extracted: fieldA, fieldB]
Expecting all elements of:
[("value1", "value2"), (null, "value4")]
to satisfy given requirements, but these elements did not:
(null, "value4")
error:
Expecting actual:
[null, "value4"]
not to contain null elements
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
345 次 |
| 最近记录: |