当前位置: 首页 > 知识库问答 >
问题:

AssertJ:对于Pojo,如何在一个链接语句中检查每个嵌套的属性/字段

丁文轩
2023-03-14
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
}
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
assertThat(clientWebRequest).isNotNull()
                            .extracting("header.accept")
                            .doesNotContainNull();

assertThat(clientWebRequest).isNotNull()
        .extracting("header.acceptLanguage", "header.contentType")
       .containsNull();

从上面(两个块),如果我尝试以下(一个块):

assertThat(clientWebRequest).isNotNull()
                            .extracting("header.accept")
                            .doesNotContainNull();
       .extracting("header.acceptLanguage", "header.contentType")
       .containsNull();

它失败了。只是好奇是否有可能应用一个块。

共有1个答案

华英睿
2023-03-14

我认为最好的方法是提取所有的属性/字段,然后检查它不包含NULL。

示例:

TolkienCharacter frodo = new TolkienCharacter("Frodo", 33, HOBBIT);

// support nested properties: 
assertThat(frodo).extracting("name", "age", "race.name")
                 .doesNotContainNull()
                 .containsExactly("Frodo", 33, "Hobbit");

注意,您还可以使用lambdas从测试对象中提取值。

assertThat(frodo).extracting(TolkienCharacter::getName,
                             character -> character.age,
                             character -> character.getRace().getName())
                 .containsExactly("Frodo", 33, "Hobbit");
 类似资料:
  • 以下是一个示例: 是否可以将此链接到一个单独的assertThat语句中 对不起,问题不清楚。我的意思是,是否有一些fluent方法调用将多个assertThat语句链接在一起。下面是我能想到的一个例子:

  • 我使用以下断言,但失败了。这是在AssertJ中测试JSON的正确方法吗。

  • 我有两个嵌套的IF语句。。 <代码>=如果($B3=$K$3,日期(年(D3)$L$3,月(D3)$M$3,天(D3)),如果($B3=$K$4,日期(年(D3)$L$4,月(D3)$M$4,天(D3)),如果($B3=$K$5,日期(年(D3)$L$5,月(D3)$M$5,天(D3)),如果($B3=$K$6,日期(年(D3)$L$6,月(D3)$M$6,天(D3)),“”) 和

  • 假设我有以下两本词典: 我想检查dict1是否是dict2的子集(即dict 1中的键值对是否显示在dict2中,而dict2中的相同键值将包括额外的值,如充电状态和设备)。 但我知道 请注意,这是一个不同的问题: 遍历所有嵌套字典值? 对嵌套字典的嵌套值求和 循环访问嵌套字典 有人能帮忙吗? 提前致谢。

  • 我想知道在ReactJSJSX中是否可以嵌套if else if? 我尝试过各种不同的方法,但我无法让它发挥作用。 我正在寻找 我已经试过了,但是我不能把它渲染出来。我试过各种方法。添加嵌套if后,它总是会中断。 使现代化 最后,我选择了将其移动到renderContent并调用该函数的解决方案。不过,这两个答案都有效。我想我可以使用内联解决方案,如果它用于简单的渲染和更复杂的情况下的渲染内容。

  • 我想用flow注释以下内容: 我知道如何对进行类型检查,以使的类型为(如上所示),但如何对其属性进行类型检查? 已经尝试过这个: 但是flow只是抱怨从未使用过和。