作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个我想使用 JsonUnit 的测试框架用于比较两个 JSON。我的断言如下所示:
JsonAssert jsonAssert = assertThatJson("{\"a\":1, \"b\":2}")
.when(Option.IGNORING_ARRAY_ORDER)
.isEqualTo("{b:2, a:1}");
有没有办法从 JsonAssert 对象中提取 boolean 值和比较消息?
最佳答案
如果断言失败,方法 assertThatJson(...)
会抛出一个 AssertionError
。在这种情况下,变量 jsonAssert
没有赋值,您无法提取某些内容。
但是,您可以将您的断言包装在一个 try-catch block 中,并围绕它构建您想要的逻辑。因此,捕获 AssertionError
然后提取消息。您可以在 try-block 中将 boolean 值设置为 true(如果成功)或在 catch-block 中设置为 false (以防失败)。
boolean success;
String message;
try {
assertThatJson("{\"a\":1, \"b\":2}")
.when(Option.IGNORING_ARRAY_ORDER)
.isEqualTo("{b:1, a:1}");
success = true;
message = "Assertion successful";
} catch (AssertionError e) {
success = false;
message = e.getMessage();
}
System.out.println(success);
System.out.println(message);
成功时输出:
true
Assertion successful
失败时的输出:
false
JSON documents are different:
Different value found in node "b", expected: <1> but was: <2>.
如果您想使其可重用,一个选择是创建一个辅助方法 (getAssertionResult
),该方法将结果作为自定义对象 (Result
) 返回,并接受一个lambda 来评估 try-catch-block 中的给定断言。这是一个返回与上面所示相同的输出的示例:
public static void main(String[] args) {
final Result result = getAssertionResult(() -> {
assertThatJson("{\"a\":1, \"b\":2}")
.when(Option.IGNORING_ARRAY_ORDER)
.isEqualTo("{b:2, a:1}");
});
System.out.println(result.isSuccess());
System.out.println(result.getMessage());
}
public static Result getAssertionResult(final Runnable assertion) {
try {
assertion.run();
return new Result(true, "Assertion successful");
} catch (AssertionError e) {
return new Result(false, e.getMessage());
}
}
static class Result {
private final boolean success;
private final String message;
public Result(final boolean success, final String message) {
this.success = success;
this.message = message;
}
public boolean isSuccess() {
return success;
}
public String getMessage() {
return message;
}
}
关于java - 如何从 JsonUnit 获取断言结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68126617/
我正在开发一个我想使用 JsonUnit 的测试框架用于比较两个 JSON。我的断言如下所示: JsonAssert jsonAssert = assertThatJson("{\"a\":1, \"
我是一名优秀的程序员,十分优秀!