为什么Minitest似乎并不总是报告' Actual'测试结果是?

时间:2015-04-29 19:27:26

标签: ruby minitest

为什么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;由于某种原因再次对我

一如既往!

1 个答案:

答案 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将输出显示为两个单独的字符串(注意两组不同的引号)。