`
oliver_peng
  • 浏览: 43218 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

升级到Ruby 1.9 笔记三

    博客分类:
  • Ruby
阅读更多
+ 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]"
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics