为什么MiniTest有时真正展示了什么' Actual'有时它会显示零/空白/引用。
示例 - 我知道a.join的值有"嗨"显示在2行,空行。
class Question
def stack
"Hi\n" \
"Hi\n"
end
def overflow
a = []
a << stack + "\n" # This + "\n" is in question
a.join # This is "hi"s
end
end
a = Question.new
puts a.overflow
如果我拿出+ "\n"
,测试会说&#34; Actual&#34;只是一个引用,而不是它实际上是什么(这是&#34;嗨&#34;打印在2行)。如果我更换“a.join&#39;与&#34; Tadah!&#34;然后Minitest将展示&#34; Tadah!&#34;根据&#34;实际&#34;。
我有以下测试:
def test_verses
expected = "Hi\n" \
"Hi\n\n"
assert_equal expected, Question.new.overflow
end
我已经多次看到过这种情况。我永远无法判断我是否真的没有结果,或者如果Minitest只是&#34;撒谎&#34;由于某种原因再次对我
一如既往!
答案 0 :(得分:2)
Minitest的输出是预期结果的diff和实际的(我认为它实际上调用外部diff
命令)。没有单独的“预期”和“实际”部分,它们以一种显示差异的格式混合在一起。
在这种情况下,当你删除`“\ n”时,失败看起来像这样:
1) Failure:
Foo#test_verses [foo.rb:22]:
--- expected
+++ actual
@@ -1,4 +1,3 @@
"Hi
Hi
-
"
--- expected
和+++ actual
表示差异(显示在@@...
行之后)以-
开头的行预计会出现,但不会,以+
开头的行出现在结果中但不应该出现。在此示例中,有一个以-
开头的空行。这意味着预计换行中会出现换行符,但没有。这对应于您删除的+ "\n"
,但测试期待。 -
行后面的行上的引号是整个差异的结束引用,而不是“预期”部分的内容。
当您将overflow
方法的返回值更改为"Tadah!"
时,失败消息如下所示:
1) Failure:
Foo#test_verses [foo.rb:23]:
--- expected
+++ actual
@@ -1,4 +1 @@
-"Hi
-Hi
-
-"
+"Tadah!"
查看以-
开头的行,您可以看到整个预期的消息丢失,而以+
开头的行显示还有一行包含Tadah!
。这种情况也有所不同,Minitest将输出显示为两个单独的字符串(注意两组不同的引号)。