【问题标题】:Hamcrest Contains MatcherHamcrest 包含匹配器
【发布时间】:2018-10-07 17:38:32
【问题描述】:

所以我的问题表现为类型匹配;

我有查询数据库的代码,并返回一个字符串类型的数组。当我尝试针对从 Web 服务返回的 JSON 消息进行验证时,其中一个值是原始整数(没有双引号),并且验证失败,因为它说明:预期:可迭代包含 { "1", "1", "1", "1", "1"}实际:[1, 1, 1, 1, 1]我正在使用包含匹配器来验证值的 ListArray针对查询返回的许多。我的假设是 Actual 被评估为整数,但要验证的值 (Expected) 是字符串。我一直在绞尽脑汁尝试 HasToString 或 hasItem 匹配器,但我认为如果目标是单个值,那只会解析 toString。我想我的最终问题是,有没有办法强制 Hamcrest 将 JSON 数据评估为字符串,或隐式/显式地将 Expected 转换为评估的类型?提前致谢。

【问题讨论】:

  • 为什么不把字符串放在期望值中呢?这将解决所有问题,并且是最简单、最清晰和最好的方法。修改实际值以符合不同格式的预期是一个滑坡,因为您冒着转换隐藏问题的风险;你的情况很简单,但这是不好的做法,应该避免。
  • @Bohemian,这就是问题所在,期望值是字符串,它是被评估为 ArrayList 的实际值,所以匹配器只是不确定该怎么做用它。我希望我可以避免它,但是我们的 JSON 对象返回不同的类型......

标签: json rest-assured matcher hamcrest


【解决方案1】:

所以,我真的认为我想出了这个;我最终做的是在提取的对象的 ArrayList 上执行 toString(). ,这给了我字符串值;下面的代码示例:

ArrayList<String> myObj = response.path(jsonField);
String[] myObjStr = new String[myObj.size()];
int x = 0;
        for (Object obj : myObj){
            myObjStr[x] = obj.toString();
            x++;
        }

从那里,我能够比较结果数组;现在,如果我能弄清楚如何摆脱嵌套元素的讨厌的尖括号...

【讨论】:

    猜你喜欢
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    相关资源
    最近更新 更多