Ruby“test / unit”,如何在断言中显示消息

我在ruby脚本中有断言。

这些断言中的每一个也都有描述断言的消息。

所以我有两个围绕这个问题的问题

  1. 我希望在测试过程中显示与每个断言关联的消息。 目前,只有在任何事情失败时才显示消息

  2. 当任何断言失败时,整个测试退出。 即使一个断言失败,我如何继续测试?

我正在使用的示例代码

assert_match("hey", "hey this is a test", "The word exists in the string") 

所以输出目前看起来像 –

 ruby ruby11.rb -vv Loaded suite ruby Started test_ruby(Ruby): F Finished in 40.555587 seconds. 1) Failure: test_ruby11(Ruby11) [ruby11.rb:73]: Text box not displayed  is not true. 1 tests, 3 assertions, 1 failures, 0 errors 

我希望它看起来像

 ruby ruby.rb -vv Loaded suite ruby Started test_ruby(Ruby): F ok 1 - First test successful ok 2 - The text is displayed ok 3 - The image is present not ok 4 - Text box not displayed ok - The picture is visible Finished in 40.555587 seconds. 1) Failure: test_ruby(Ruby) [ruby11.rb:73]: Text box not displayed  is not true. 1 tests, 4 assertions, 1 failures, 0 errors 

因此,在上述期望的显示中,所有断言状态都显示为执行测试的时间。 (像Perl中的TAP一样)。 我是ruby的新手,所以我确信有一些基本的我做错了。

此外,我在运行脚本时尝试了详细参数ruby ruby.rb -vv 。 但这也无济于事。

帮助将被推荐

特别是TAP输出没有多少选择。 一个测试框架是Bacon ,它是一个带有TAP输出的RSpec克隆,但它似乎不再活跃。

如果你想要的是与持续集成的兼容性, ci_reporter gem可用于将测试结果(从Test :: Unit和RSpec)转换为JUnit XML格式,这将使它与Jenkins / Hudson,Bamboo和其他JUnit一起使用 – 意识到CI服务器。

但与RSpec不同,Test / Unit有一个限制,它不会报告通过的测试。 有关通过RSpec HTML格式化程序运行Test / Unit的讨论,其中包括传递测试的名称。

2015年更新:您可能希望了解MiniTest,它现在越来越流行并且有许多格式化插件,并且非常灵活/可扩展。

这就是我的工作方式,但请考虑以下事项:

  1. 每次测试都有一个断言。 应针对离散的行为块添加每个特定测试。 例如,如果文本在没有图像出现的情况下出现,则需要单独的test_text_appearstest_image_appears测试。 每次测试都有一个断言意味着当某些东西断开时,你可以看到所有失败的断言,而不仅仅是在有大量断言的测试中的第一个断言。
  2. 让测试名称描述它应test_text_appears ,例如test_text_appears
  3. 应该说什么失败的消息 – 我不是100%确定这里有什么好主意,所以我开辟了一个单独的问题: 什么使testunit或其他nunit样式框架成为一个好的失败消息?