+ Ruby 1.9 用新的单元测试框架MiniTest替换了1.8版本中的Test::Unit测试框架,同Test::Unit相比,MiniTest保留了其核心框架,但删除了一些附加的功能,比如Testcase Runner, 图形界面。为了和Test::Unit兼容,MiniTest还提供了一个适配层来将原有Test::Unit的接口影射到新的框架,这样原有1.8的测试用例能够不需要修改就能够直接运行。
但我在升级的时候还是遇到了问题。下面是测试代码,保存为文件test.rb:
require 'test/unit'
class Test_Main < Test::Unit::TestCase
def test1
puts "ARGV[0] = %s" % ARGV[0]
puts "ARGV[1] = %s" % ARGV[1]
puts "ARGV[2] = %s" % ARGV[2]
end
end
在Ruby 1.8运行:
ruby ./test.rb -- a b c
Loaded suite ./test
Started
ARGV[0] = a
ARGV[1] = b
ARGV[2] = c
在Ruby 1.9运行:
ruby ./test.rb -- a b c
Loaded suite ./test
Started
ARGV[0] = --
ARGV[1] = a
ARGV[2] = b
从运行结果可以看到新的测试框架在解析参数的时候没有过滤掉--,这个导致测试用例在解析参数的时候出错。
解决方法:
安装test-unit Gem恢复使用Unit::Test测试框架。
+ 在Ruby 1.8, instance_variables方法会返回所有成员变量名,例如:
irb(main):003:0> class A
irb(main):004:1> def initialize
irb(main):005:2> @a = 1
irb(main):006:2> end
irb(main):007:1> end
=> nil
irb(main):008:0> a = A.new
=> #<A:0xb7c08980 @a=1>
irb(main):009:0> a.instance_variables
=> ["@a"]
在Ruby 1.9, instance_variables会返回所有成员变量Symbol名,例如:
irb(main):001:0> class A
irb(main):002:1> def initialize
irb(main):003:2> @a = 1
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> a = A.new
=> #<A:0x0000001754caf0 @a=1>
irb(main):007:0> a.instance_variables
=> [:@a]
+ Array 对象的to_s方法会返回不同格式的字符串
Ruby 1.8:
irb(main):001:0> [1,2,3].to_s
=> "123"
Ruby 1.9:
irb(main):001:0> [1,2,3].to_s
=> "[1, 2, 3]"
分享到:
相关推荐
需要注意的是,由于Redmine不支持Ruby 1.9版本,因此应遵循官方指南安装1.8版本。 3. **安装Subversion**: Redmine能够与版本控制系统集成,如Subversion。首先,通过`apt-get`安装Subversion。然后,使用`svn`...
delayed_job_mongoid取决于mongoid 3.0这需要Ruby 1.9的,所以不存在用于支持ruby 1.8.7为。用法如果您使用的是Rails = <3.1,或者config.assets.initialize_on_precompile设置为false,则将其添加到config/...
注意:Ruby3x3 的基准是 2.0,因此 2.x 中的所有改进都将计入 3x 目标。 找到更多 @ 主要Ruby , - 也称为 Matz 的 Ruby Interpreter (MRI) 或 CRuby; 从 1.9 版开始使用 YARV(又一个 Ruby VM)。 , - 基于 MRI 的 ...
在 Ruby 1.8.7、1.9.x、2.1.x 上测试 安装 安装宝石: gem install guard - annotate 将 gem 添加到您的 Gemfile 中: gem 'guard-annotate' 通过运行将保护定义添加到您的 Guardfile: guard init annotate ...
简单的收音机 一组用于 Rdio 的 Web API 的简单客户端库。 这些用于 Python、PHP、Ruby、Node.js 和 Java 的库实现了与 Rdio 服务对话所需的 OAuth 子集,并且具有...测试套件依赖于ruby-1.9命令来运行 1.9 版的 ru