【问题标题】:Is there an easier way to call a Java assertion from a Karate test and provide the assertion a failure message?有没有更简单的方法可以从空手道测试中调用 Java 断言并为断言提供失败消息?
【发布时间】:2020-03-20 05:29:44
【问题描述】:

有没有更简单的方法可以从空手道测试中调用 Java 断言并为断言提供失败消息?我有一种感觉一定有更优雅的方式?

这是我现在做的不正确的方式:

* def assertNotBlank =
    """
    function(val, msg) {
      var Assertions = Java.type('org.junit.jupiter.api.Assertions');
      var StringUtils = Java.type('org.apache.commons.lang3.StringUtils');
      var JSONObject = Java.type('org.json.JSONObject');
      return Assertions.assertFalse(StringUtils.isBlank(
        new org.json.JSONObject(val).toString()), msg);
    }
    """

然后像这样在你的功能文件中调用它:

And eval assertNotBlank {val: '#(response)', msg: 'The reason here.'}

【问题讨论】:

    标签: karate


    【解决方案1】:

    看到这段代码让我觉得你最好不要使用空手道而只使用 Java,尤其是当我看到像 new org.json.JSONObject 这样的东西时。空手道如此擅长处理 JSON,你到底为什么要这么做?

    你可能指的是call而不是eval

    也就是说,也许这个答案会给你一些提示,也请阅读 cmets:https://stackoverflow.com/a/60693949/143475

    【讨论】:

    • 我想我走这条路是因为我需要一个带有自定义失败消息的断言。这可能是开箱即用的吗?
    • @djangofan 不,我相信你不需要它。 match 失败确实会给你一个内置消息。如果你真的需要额外的,只需在之前的行上做一个print。如果你真的想要,你可以使用 JS throws 子句:github.com/intuit/karate#conditional-logic
    • 谢谢,这正是我需要的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    相关资源
    最近更新 更多