【发布时间】:2015-01-21 23:06:06
【问题描述】:
运行 Ruby 1.9.3,当我直接使用 ./test_mail.rb 运行测试时,它通过了。当我通过'rake test'运行它时,它失败了
1) Failure:
test_initialization(TC_Test_mail) [/Users/lcuff/Software_Realm/eco/etl
/etl/etl_2.0/src/ruby/mail_processing/ruby_eco_classes/rake_example
/test_mail.rb:13]:
Expected: "Hi Mom"
Actual: "No subject specified"
我的班级:
#!/usr/bin/env ruby
class MyMail
attr_reader :subject
def initialize( mail)
subject = mail.to_s[/Subject:.*\r?/]
if subject.nil?
subject = "No subject specified"
else
subject = subject.strip.gsub!(/Subject:\s/, '')
end
@subject = subject
end
end
我的测试代码:
#!/usr/bin/env ruby
gem 'minitest'
require 'minitest/autorun'
require_relative 'MyMail'
class TC_Test_mail < MiniTest::Unit::TestCase
def test_initialization
mock_mail = MiniTest::Mock.new
mock_mail.expect(:to_s, "Subject: Hi Mom\nDate 2014-04-01\n", [])
the_mail = MyMail.new(mock_mail)
assert_equal('Hi Mom', the_mail.subject )
mock_mail.verify
end
end
还有 rakefile
require 'rake/testtask'
Rake::TestTask.new do |t|
t.pattern = "test_*.rb"
end
【问题讨论】:
-
rake时是否有多个测试运行?如果是这样,它们是按随机顺序完成的吗/所讨论的测试不是第一个? -
有多个测试。有问题的测试可以在组中的任何位置运行。如果我将模式更改为仅匹配相关测试,也是一样的。
-
您使用的操作系统可能是这种情况下的一个重要因素。
\r\n是 windows 中的行分隔符,\n是 *nix 中使用的。严格来说,正则表达式中的'\r'不应与测试数据中的'\n'匹配。从命令行执行时,有一些环境因素导致这一点被忽略。