我正在使用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
答案 0 :(得分:2)
isEqualToComparingFieldByField
将使用我怀疑未在equals
和Status
中覆盖的字段Template
方法,这意味着对于要通过的测试,它们必须是相同的引用(它们不是根据错误信息)。
另一方面,isEqualToComparingFieldByFieldRecursively
仅在覆盖时使用equals
方法,否则按字段比较字段,测试通过实际Status
/ Template
和预期的具有相同的字段值。