java - isEqualToComparingFieldByField 失败,但 isEqualToComparingFieldByFieldRecursively 正在通过

标签 java rest-assured assertj

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

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

这是我在调用 isEqualToComparingFieldByField 时遇到的异常。

Expecting values:
<[test.api.pojo.template.Template@42cc420b,
test.api.pojo.template.Status@6f2d3391]>
in fields:
<["template", "status"]>
but were:
<[test.api.pojo.template.Template@71b0289b,
test.api.pojo.template.Status@ae3c140]>
in 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 

最佳答案

isEqualToComparingFieldByField 将使用字段 equals 方法,我怀疑该方法在 StatusTemplate 中没有被覆盖,这意味着为了通过测试,它们必须是相同的引用(它们不是根据错误消息)。

另一方面,isEqualToComparingFieldByFieldRecursively 仅在重写时使用 equals 方法,否则它会逐个字段进行比较,测试将通过实际的 Status/模板 和预期的具有相同的字段值。

关于java - isEqualToComparingFieldByField 失败,但 isEqualToComparingFieldByFieldRecursively 正在通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49303735/

相关文章:

java - Spring Boot 中永远不会调用 AuthenticationEntryPoint

java - 如何使用 REST Assured 自动获取 Bearer Token

java - 如何将 Spring SecurityContext 传递给 RestAssured

java - oracle.jdbc.ReadTimeout 和 Socket 读取超时

java - 单击“结帐”按钮时的总计问题

java - 如何修复这个 Java 回文算法?

java - 如何在 Java 中使用 REST-assured 上传 CSV 文件?

java - 单击禁用的 Swing 组件

junit - AssertJ:对于 Pojo 如何检查一个链式句子中的每个嵌套属性/字段

java - AssertJ:FlatMap调用提取后的列表列表