gpt4 book ai didi

java - 如何从 JsonUnit 获取断言结果?

转载 作者:行者123 更新时间:2023-12-04 14:55:25 24 4
gpt4 key购买 nike

我正在开发一个我想使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com