升级到Ruby 1.9 笔记三

+ 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]"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值