require 'test/unit' require 'test/unit/ui/console/testrunner' require '../api/a_fee' require '../api/b_fee' class FeeTestSuite def self.suite tsuite = Test::Unit::TestSuite.new(name='FeeTestSuite') tsuite << AFee.suite tsuite << BFee.suite return tsuite end end
首先, 执行该脚本的时候, 会报错:
C:\Ruby21\bin\ruby.exe -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) C:/secretpjct/api/test_suite.rb C:/Ruby21/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- testrunner (LoadError) from C:/Ruby21/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require' from C:/secretpjct/api/test_suite.rb:5:in `<top (required)>' from -e:1:in `load' from -e:1:in `<main>' Process finished with exit code 1
然后, 我想知道, 当我去直接执行其中的a_fee.rb时, 可以执行,结果如:
Run options: # Running tests: start test_basic_feed Testing feedrequest: http://secret.com:80/feed?f=a&b=11 . Finished tests in 1.134499s, 0.8814 tests/s, 29.9692 assertions/s. 1 tests, 34 assertions, 0 failures, 0 errors, 0 skips ruby -v: ruby 2.1.4p265 (2014-10-27 revision 48166) [i386-mingw32] Process finished with exit code 0
可是, 这个脚本里有一堆的断言,比如: assert product, "Check if there are products",为什么没有在上面的结果里显示出这些message?
还有, 我修改了:
assert_match(/\d{5,7}/, (product%'/id').inner_text, "Checking id is a number with 5 to 7 digits")
assert_match(/\d{1,2}/, (product%'/id').inner_text, "Checking id is a number with 5 to 7 digits")
这时候, product id应该报不对才是,可是我去跑这个脚本时,依然全部通过:1 tests, 34 assertions, 0 failures, 0 errors, 0 skips
为什么啊?
第一个问题,看报错是找不到testrunner。最近,ruby测试用rspec比较多,对原生的test/unit了解不多,不知道是不是由于版本问题。你最好自己检查一下你目前版本test/unit的源码,一般在YOUR_RUBY_ROOT/lib/ruby/VERSION_NUMBER/test下面。
第二个问题,其实确实应该报正确的。如果能够通过第一个正则,说明字符串中至少匹配到了一处5到7个字符,那么必然也可以匹配到1到2个字符,两者其实是包含关系,区别在于匹配到的子串有所不同。如果你想故意试出通不过的情况,应该把匹配字符数加大而非减小。你可以做个实验:
'1234567'.match/\d{5,7}/
'1234567'.match/\d{1,2}/
非常感谢,第一个确实是版本问题,第二个也确实是如你所说版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。