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

时间:2011-12-09 19:30:08

标签: ruby unit-testing testunit tap

我的ruby脚本中有断言。

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

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

  1. 我希望与每个断言关联的消息显示为 测试进展。目前Message只显示任何东西 失败

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

  3. 我正在使用的示例代码

    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.rb -v v。但这也无济于事。

    帮助将被推荐

2 个答案:

答案 0 :(得分:0)

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

  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?

答案 1 :(得分:-2)

具体而言,TAP输出没有多少选择。一个测试框架是Bacon,它是带有TAP输出的RSpec克隆,但它似乎不再有效。

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

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

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