首页 > 解决方案 > 比较两个字符串并使用 diff 显示结果 - 这可以快速发现差异

问题描述

当使用#kotlintest 将两个字符串与这样的测试进行比较时:

    "compare two strings" {
      "1: one\n2: two\n3: three".shouldBe("1: one1\n22: two\n3: three")
    }

,输出如下所示:

expected: "1: one1
22: two
3: three" but was: "1: one
2: two
3: three"
org.opentest4j.AssertionFailedError: expected: "1: one1
22: two
3: three" but was: "1: one
2: two
3: three"

即使有这么短的字符串 - 也很难发现这两个字符串之间究竟有什么不同。如果比较较长的字符串或对象属性,则要困难得多,因为结果只是一条长的可滚动行。

然而——我们都非常习惯于阅读“差异”——它的 +/- 线条和颜色,可以让我们立即发现差异。

例如,当由rspec(test lib for ruby​​) 运行时,这是相同断言的结果:

expected: "1: one\n22: two\n3: three"
     got: "1: one\n2: two\n3: three"

(compared using ==)

Diff:
@@ -1,4 +1,4 @@
 1: one
-22: two
+2: two
 3: three

如您所见 - 它在两个方面对我有帮助。首先 - 它将两个字符串放在彼此下方,以便我可以发现字符级别的差异。其次,它diff与我们熟悉的颜色相得益彰,让我立即看到没有什么不同,有什么不同。

有没有办法实现一些相似的测试结果比较,并提供相似的好处来快速发现差异?

我尝试了 KotlinTest 和 JUnit5 - 两个比较结果都非常“可以在一行中水平滚动”。也许在其他一些 Kotlin 测试框架中?

谢谢!

标签: kotlinkotlintest

解决方案


推荐阅读