首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从JsonUnit获取断言结果?

如何从JsonUnit获取断言结果?
EN

Stack Overflow用户
提问于 2021-06-25 14:47:57
回答 1查看 148关注 0票数 3

我正在开发一个测试框架,我想使用JsonUnit来比较两个JSON。我的断言看起来像这样:

代码语言:javascript
复制
JsonAssert jsonAssert = assertThatJson("{\"a\":1, \"b\":2}")
        .when(Option.IGNORING_ARRAY_ORDER)
        .isEqualTo("{b:2, a:1}");

有没有办法从JsonAssert对象中提取布尔值和比较消息?

EN

回答 1

Stack Overflow用户

发布于 2021-07-01 17:59:37

如果断言失败,assertThatJson(...)方法将抛出AssertionError。在这种情况下,变量jsonAssert没有赋值,您无法提取某些内容。

但是,您可以将断言包装在try-catch块中,并围绕它构建所需的逻辑。因此,捕获AssertionError,然后提取消息。可以在try-block内将布尔值设置为true (如果成功),或者在catch-block内将boolean设置为false (如果失败)。

代码语言:javascript
复制
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);

成功时的输出:

代码语言:javascript
复制
true
Assertion successful

失败时的输出:

代码语言:javascript
复制
false
JSON documents are different:
Different value found in node "b", expected: <1> but was: <2>.

如果希望使其可重用,一种选择是创建一个helper方法(getAssertionResult),该方法以自定义对象(Result)的形式返回结果,并采用一个lambda来计算try-catch-block内的给定断言。下面是一个示例,它返回与上面所示相同的输出:

代码语言:javascript
复制
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;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68126617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档