Junit AssertJ:对于Pojo,如何在一个链式语句中检查每个嵌套属性/字段
具有Junit AssertJ:对于Pojo,如何在一个链式语句中检查每个嵌套属性/字段,junit,assertj,Junit,Assertj,具有POJO的,例如: public class ClientWebRequest { private URI uri; private HttpMethod httpMethod; private final Header header; private final Body body; public ClientWebRequest(){ header = new Header(); body = new Bod
POJO
的,例如:
public class ClientWebRequest {
private URI uri;
private HttpMethod httpMethod;
private final Header header;
private final Body body;
public ClientWebRequest(){
header = new Header();
body = new Body();
}
//getters and setters
}
关于JUnit
使用AssertJ
以下内容有效,@Test
方法通过:
assertThat(clientWebRequest).isNotNull();
assertThat(clientWebRequest.getHeader()).isNotNull();
assertThat(clientWebRequest.getHeader().getAccept()).isNotNull();
assertThat(clientWebRequest.getHeader().getAcceptLanguage()).isNull();
assertThat(clientWebRequest.getHeader().getContentType()).isNull();
assertThat(clientWebRequest.getBody()).isNotNull();
assertThat(clientWebRequest.getBody().getBody()).isNull();
即使有效,在某种程度上也是冗长的
我想知道是否有可能在一句话中重写上述所有内容,检查每个嵌套属性/字段。因此,我尝试了以下方法:
assertThat(clientWebRequest.getHeader()).isNotNull()
.hasFieldOrProperty("accept").isNotNull()
.hasFieldOrProperty("acceptLanguage").isNull();
但失败,并显示以下错误消息:
org.junit.ComparisonFailure: expected:<null>
but was:<Header [accept=[application/json;charset=UTF-8], acceptLanguage=null, contentType=null]>
at
从上面(两个街区)如果我尝试以下(一个街区):
它失败了。只是想知道是否可以应用一个块。我认为最好的方法是对所有属性/字段进行检查,然后检查它是否不包含null 例如:
TolkienCharacter frodo = new TolkienCharacter("Frodo", 33, HOBBIT);
// support nested properties:
assertThat(frodo).extracting("name", "age", "race.name")
.doesNotContainNull()
.containsExactly("Frodo", 33, "Hobbit");
请注意,您还可以从测试对象中使用
assertThat(frodo).extracting(TolkienCharacter::getName,
character -> character.age,
character -> character.getRace().getName())
.containsExactly("Frodo", 33, "Hobbit");
谢谢,请查看添加的Alpha部分。不确定是否可以使用一个块。这不起作用,因为在应用
提取
后,您最终会对与提取的属性对应的值集合执行断言。如果再次使用extracting
,它将尝试从上一个值集合的每个元素中提取属性。如果character.getRace()
为null,会发生什么情况,测试用例不会因为NullPointerException而崩溃?是的,您会得到一个NPE
TolkienCharacter frodo = new TolkienCharacter("Frodo", 33, HOBBIT);
// support nested properties:
assertThat(frodo).extracting("name", "age", "race.name")
.doesNotContainNull()
.containsExactly("Frodo", 33, "Hobbit");
assertThat(frodo).extracting(TolkienCharacter::getName,
character -> character.age,
character -> character.getRace().getName())
.containsExactly("Frodo", 33, "Hobbit");