如何配置ruby单元测试执行?

时间:2009-11-12 14:07:35

标签: ruby unit-testing

我想知道运行10个最耗时的测试花了多少时间...就像我可以用rspec做的那样,有什么建议吗?

3 个答案:

答案 0 :(得分:7)

简短回答:

gem install minitest # Install MiniTest
gem install minitest_tu_shim # Install Test::Unit shim
use_minitest yes # Use MiniTest Test::Unit shim instead of stdlib Test::Unit 
ruby your_test.rb -v # Run your test in verbose mode

Ruby 1.9使用MiniTest作为默认测试框架而不是Test::Unit。 MiniTest更小,更快,具有更多有用的功能,并且与Test :: Unit大部分向后兼容。其中一个较新的功能是使用-v标志测量每个测试所用的时间。当你运行时,请确保在脚本

之后放置此标志

如果在rails中使用Rake::TestTask来运行测试,则可以通过运行

在运行时指定它
rake test TESTOPTS='-v'

或通过将-v添加到options属性来在任务中指定它,就像这样

Rake::TestTask.new do |t|
  t.options = '-v'
end

最后,如果您正在使用rails并且MiniTest对您来说不够好,您可能会欣赏test_benchmark插件。用法很简单。将以下行添加到config/environments/test.rb

config.gem "timocratic-test_benchmark",
  :lib => 'test_benchmark',
  :source => 'http://gems.github.com'

安装
RAILS_ENV='test' rake gems:install

从那时起,当你运行测试时,你会得到一个很好的排序列表

rake test:units
[...]
Test Benchmark Times: Suite Totals:
7.124 test_destroy(FeedTest)
7.219 test_create(FeedTest)
7.646 test_subscribe_to_auto_discovery(FeedTest)
9.339 test_auto_discover_updates_url(FeedTest)
9.543 test_find_or_create_by_auto_discover_url(FeedTest)
15.780 test_import_from_opml(FeedTest)

我很遗憾地说MiniTesttest_benchmark插件彼此不兼容,但我强烈建议您尝试MiniTest,因为它会让您的测试更快,并将继续在Ruby 1.9中得到支持。

答案 1 :(得分:0)

也许通过使用ruby -rprofile而不仅仅是ruby执行代码,在ruby探查器下运行单元测试?

答案 2 :(得分:0)

Minitest :: Profile是一个新的宝石,它列出了标准测试运行后的顶级违规者。

https://github.com/nmeans/minitest-profile