【问题标题】:Ruby "test/unit" , how do I display the messages in assertsRuby“测试/单元”,我如何在断言中显示消息
【发布时间】:2011-12-09 19:30:08
【问题描述】:

我的 ruby​​ 脚本中有断言。

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

所以我有两个关于这个的问题

  1. 我希望与每个断言关联的消息显示为 测试进展。目前消息仅在有任何事情时显示 失败

  2. 当任何断言失败时,整个测试都会退出。我怎么做 即使一个断言失败,测试也会继续?

我正在使用的示例代码

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

所以当前的输出看起来像 -

ruby ruby11.rb -v v
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
<false> is not true.

1 tests, 3 assertions, 1 failures, 0 errors

我希望它看起来像

ruby ruby.rb -v v
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
<false> is not true.

1 tests, 4 assertions, 1 failures, 0 errors

所以在上面想要的显示中,所有的断言状态都显示为测试执行时的状态。 (类似于 perl 中的 TAP)。 我是 ruby​​ 新手,所以我确信我做错了一些基本的事情。

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

感谢您的帮助

【问题讨论】:

  • ruby ruby.rb --verbose 呢?

标签: ruby unit-testing testunit tap


【解决方案1】:

这就是我的做法,但请考虑以下几点:

  1. 每个测试有一个断言。应该为离散的行为块添加每个特定的测试。例如,如果文本可能出现而没有图像出现,则有单独的test_text_appearstest_image_appears 测试。每个测试有一个断言意味着当某些东西确实发生故障时,您可以看到所有失败的断言,而不仅仅是包含大量断言的测试中的第一个断言。
  2. 让测试名称描述它应该做什么,例如test_text_appears
  3. 失败消息应该说什么 - 我不能 100% 确定这里有什么好主意,所以我提出了一个单独的问题:What makes a good failure message for testunit or other nunit style frameworks?

【讨论】:

  • 您好安德鲁,感谢您的回复。但是使用这种技术,我通过的测试仍然不会显示,对于我的特殊情况来说非常重要。我需要以报告的形式显示这些断言通过/失败/错误。感谢您对每个断言进行单独测试的输入,以免在第一次失败时退出。那会很有帮助。
【解决方案2】:

TAP 输出没有太多选择。一个测试框架是 Bacon,它是一个带有 TAP 输出的 RSpec 克隆,但它似乎不再处于活动状态。

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

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

2015 年更新:您可能想了解 MiniTest,它现在越来越受欢迎,并且有许多格式化程序插件,并且非常灵活/可扩展。

【讨论】:

  • 所以目前无法完成?我打算最终将结果转换为 JUNIT xml 样式(在 jenkins 中使用),所以我想要结果的唯一原因是帮助我在构建测试脚本时进行调试。不过感谢您的意见。
  • 我们在 Jenkins 中使用 RSpec,所以这当然可以做到。测试/单元也可以,但我更喜欢 RSpec。 ci_reporter gem 将输出转换为 Jenkins 需要的 JUnit XML。
  • 感谢您的回复。我会将您的解决方案标记为答案。 (但我仍然喜欢围绕测试/单元的解决方案:)。)
  • @perlnewbie 你走运了! ci_reporter 也适用于测试/单元。见github.com/nicksieger/ci_reporter
  • 是的 ci_reporter 确实适用于测试单元,但核心问题仍然存在。所有通过的断言,都不会被报告。只有那些失败的会显示“失败的断言”(带/不带评论)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多