【问题标题】:How do I run a Test::Unit suite to completion with a tally of tests/failures?如何运行 Test::Unit 套件以完成一系列测试/失败?
【发布时间】:2010-11-15 18:33:19
【问题描述】:

我继承了一个大型的 Test::Unit 测试套件,我的首要任务之一是让套件运行到完成,而不是在第一次测试失败后退出。

我目前正在营救AssertionFailedError 并确保输出字符串,但这似乎是错误的。有什么更好的方法?似乎这将是一个配置选项。

【问题讨论】:

    标签: ruby unit-testing testunit


    【解决方案1】:

    更多背景知识会有所帮助。我不能说我理解你所看到的行为。

    我正在使用 ruby​​ 1.8 附带的核心测试/单元库,以及 ruby​​ 1.9 的几个版本的 gem。这两种情况的正常行为是运行整个加载的套件以完成并总结结果。

    运行一个显示require 'test/unit' 的脚本将添加一个退出钩子以运行带有Test::Unit::Collector::ObjectSpace 收集器的Test::Unit::AutoRunner(即运行当前加载到全局对象空间中的每个Test::Unit::TestCase 实例)。

    编写您自己的自定义测试运行程序也相当容易,它手动加载您的测试类并将它们打包到Test::Unit::TestSuite 中,并捕获其结果。

    但是对于我使用的每个版本的测试/单元,我总是看到整个套件完成并报告失败和错误。代替进一步的信息,我建议尝试一个单一的虚拟测试,看看你应该如何期望测试/单元的行为。

    例如

    require 'test/unit'
    class Foo < Test::Unit::TestCase
      def testFoo
        flunk 'bad foo'
      end
    end
    class Bar < Test::Unit::TestCase
      def testBar
        raise 'bar bar'
      end
    end
    

    给予

    Loaded suite foo
    Started EF Finished in 0.001000 seconds.
    
      1) Error:
    testBar(Bar)
    RuntimeError: bad bar
        foo.rb:9:in `testBar`
    
      2) Failure:
    testFoo(Foo) [foo.rb:4]:
    bad foo
    
    2 tests, 1 assertions, 1 failures, 1 errors, 0 skips
    

    最后:你在哪里试图拯救/确保?在测试方法中?在正常情况下,没有理由捕获 AssertionFailedError。这是Test::Unit::TestCase 做的,作为一种计算失败并为您提供所需报告的方法。捕捉到这一点会干扰编写测试/单元的工作。

    【讨论】:

    • 谢谢,我发现我的所有测试都是单独运行而不是由一个套件运行,因为它们是动态创建的。
    • 我的测试也完成了,有时让我懊恼的是,当一些主要的东西坏了导致很多其他的破损。我喜欢 Autotest,因为它会在我保存更改时自动重新运行。
    猜你喜欢
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多