当前位置: 首页 > 知识库问答 >
问题:

使用assertEquals进行比较时,预期的相等JSON字符串不相等

宦博雅
2023-03-14

我为web服务客户端编写了JUnit测试,它向服务提交JSON文档。

我将"正确的"JSON文档保存到文件中,然后在测试执行后将其与实际结果进行比较。

它们不匹配,尽管行是相同的:

    org.junit.ComparisonFailure: 
    Expected :{"Callback":null,"Data":
    {"MarketCode":"ISEM",,............"Price":2.99}]}]}]}]}}
    Actual   :{"Callback":null,"Data":
    {"MarketCode":"ISEM",,............"Price":2.99}]}]}]}]}}

行很长,大约4K字符,所以我在这里删掉了大部分,但它们的长度是相同的。我比较了绳子。调试器中的size(),并在比较之前对其进行修剪,以最终删除一些不可见或空白符号,文本编辑器可以隐式插入这些符号。

此外,当单独执行时,测试是正常的。但当我把它作为更大的套件的一部分运行时,它失败了。

没有全局/静态变量,因此内存重写应该不成问题。我嘲笑Web服务客户端提取请求字符串,如下所示:

StringBuilder pd = new StringBuilder();
doAnswer((invocation) -> {
  String postDocument = ((String)invocation.getArguments()[0]).trim();
  pd.append(postDocument);
  return null;
}).when(client).doPost(anyString(), anyObject());

客户端是模拟类。

然后我比较了修剪过的字符串版本,但这并没有帮助

String expectedSubmit = TestUtils.readXmlFromFile("strategyexecution\\ireland_bm_strategy_override_expected.json").trim();
assertEquals(expectedSubmit, pd.toString().trim());

共有2个答案

子车鸿才
2023-03-14

和XML一样的老问题。对于XML,有一个XMLUnit,它在语义上比较xml-s。对于JSON,我会尝试使用类似的工具,如JsoNUnit。JSONAsrett看起来也很有希望。

符渊
2023-03-14

我自己找到了答案:-)问题在于JSON规范本身。JSON不能保证数组中元素的顺序相同,它基本上是无序的。因此,内容可以随机重新排序。生成的两个JSON文件不应作为两个字符串进行比较。

我将其反序列化为Java对象,对象比较工作!

 类似资料:
  • JavaScript 有两种方式判断两个值是否相等。 等于操作符 等于操作符由两个等号组成:== JavaScript 是弱类型语言,这就意味着,等于操作符会为了比较两个值而进行强制类型转换。 "" == "0" // false 0 == "" // true 0 == "0"

  • 问题内容: 首先采取klurudge解决方案,使用哨兵方法(必须让您的程序不允许输入哨兵值): 假设您忘记了阻止程序中的哨兵值,用户在B字段中输入了-2147483648,而A为空。上面的代码报告为true,应报告为false,不应报告为true或null。 比较可为空字段上的相等性的最简洁方法是什么?A == B仅应报告true或false,而不管该字段是否可为空。 问题答案: 也许IS [NO

  • 问题内容: 我想将多个字符串相互比较,并找到最相似的字符串。我想知道是否有任何库,方法或最佳实践会返回我哪些字符串与其他字符串更相似的字符串。例如: “The quick fox jumped” -> “The fox jumped” “The quick fox jumped” -> “The fox” 该比较将返回第一个比第二个更相似。 我想我需要一些方法,例如: 某处有这样的东西吗? 编辑:

  • 问题内容: 通过搜索发现了类似的问题,但我是一位新的(糟糕的)程序员,无法理解答案。 我有一个.txt文件,其中包含多个字符串,以’-‘分隔。我使用拆分将一些字符串分成变量,其中两个相等,但是在if语句中它们不相等。 这将产生以下结果: 瑞典 瑞典 没有 在两个“ Sweden”字符串之前和之后都有一个空格,并且它们都用大写字母“ S”编写,但不相等吗?我在哪里搞砸了? 问题答案: 最后一个元素包

  • 是否有一种惯用的方法来比较两个NumPy数组,它们将NaN视为彼此相等(但不等于NaN以外的任何东西)。 例如,我希望以下两个数组比较相等: 和以下两个数组进行比较: 我正在寻找一种可以产生标量布尔结果的方法。 以下方法可以做到这一点: 但它很笨重,并且创建了所有这些中间数组。 有没有一种方法可以更容易地观察眼睛,更好地利用记忆? 另外,如果有帮助的话,已知数组具有相同的形状和数据类型。

  • 问题内容: 似乎PHP的运算符区分大小写。那么有使用理由吗? 执行以下操作是否安全? 问题答案: 使用它的原因是因为 如果str1小于str2,则返回<0;如果str1大于str2,则> 0;如果相等,则> 0。 仅返回或,它不会告诉您哪个是“更大”的字符串。