isEqualToComparingFieldByField失败,但isEqualToComparingFieldByFieldRecursively正在传递

时间:2018-03-15 15:44:38

标签: java rest-assured assertj

我正在使用rest-assured编写测试来测试API。我将预期的响应存储为String,我使用google gson将其转换为对象,然后使用assertj的isEqualToComparingFieldByField断言对象是相等的。

即使对象字段值相同,测试也会失败。很奇怪的是,当我调用isEqualToComparingFieldByFieldRecursively时,测试通过了吗?我可以使用isEqualToComparingFieldByFieldRecursively,但是对于我的下一个测试,我需要使用isEqualToIgnoringGivenFields。

以下是调用isEqualToComparingFieldByField时获得的异常。

  

期望值:
         百分比抑制率test.api.pojo.template.Template@42cc420b,
          test.api.pojo.template.Status@6f2d3391] GT;
      在字段中:
        < [“template”,“status”]>
      但是:
        百分比抑制率test.api.pojo.template.Template@71b0289b,
          test.api.pojo.template.Status@ae3c140] GT;
      在test.api.pojo.template.TemplateResponse@2c9cafa5>。

这是测试的代码

   
RequestSpecification request = given()
            .spec(spec)
            .pathParam("name", "abc");

Response response = request.when().get(ENDPOINT_GET_TEMPLATE);

String expectedResponseStr =  "{ \"id\": 1247,"
    + "\"versionNumber\": 0,"
    + "\"template\": {";//...

String actualResponseStr = response.asString();
assertThat(actualResponseStr).isEqualTo(expectedResponseStr); //this passes 


TemplateResponse expectedResponseObj = convertToObj(expectedResponseStr, TemplateResponse.class);
TemplateResponse actualResponseObj = response.then().extract().as(TemplateResponse.class);

assertThat(actualResponseObj)
    .isEqualToComparingFieldByFieldRecursively(expectedResponseObj); //this passes

assertThat(actualResponseObj)
    .isEqualToComparingFieldByField(expectedResponseObj); //this fails with 

1 个答案:

答案 0 :(得分:2)

isEqualToComparingFieldByField将使用我怀疑未在equalsStatus中覆盖的字段Template方法,这意味着对于要通过的测试,它们必须是相同的引用(它们不是根据错误信息)。

另一方面,isEqualToComparingFieldByFieldRecursively仅在覆盖时使用equals方法,否则按字段比较字段,测试通过实际Status / Template和预期的具有相同的字段值。