开发者社区> 问答> 正文

问一个ruby的问题?报错

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

为什么啊?




展开
收起
爱吃鱼的程序员 2020-06-14 20:01:41 627 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    第一个问题,看报错是找不到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}/

    非常感谢,第一个确实是版本问题,第二个也确实是如你所说
    2020-06-14 20:01:57
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载