`
oliver_peng
  • 浏览: 45122 次
  • 性别: 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]"
分享到:
评论

相关推荐

    linux下redmine安装笔记

    需要注意的是,由于Redmine不支持Ruby 1.9版本,因此应遵循官方指南安装1.8版本。 3. **安装Subversion**: Redmine能够与版本控制系统集成,如Subversion。首先,通过`apt-get`安装Subversion。然后,使用`svn`...

    dj_mon:延迟作业的前端(不再维护)

    delayed_job_mongoid取决于mongoid 3.0这需要Ruby 1.9的,所以不存在用于支持ruby 1.8.7为。用法如果您使用的是Rails = &lt;3.1,或者config.assets.initialize_on_precompile设置为false,则将其添加到config/...

    java多线程笔试题-awesome-rubies:一组很棒的Ruby(编译器、解释器、虚拟机、解析器、文档生成器、版本管理器等)

    注意:Ruby3x3 的基准是 2.0,因此 2.x 中的所有改进都将计入 3x 目标。 找到更多 @ 主要Ruby , - 也称为 Matz 的 Ruby Interpreter (MRI) 或 CRuby; 从 1.9 版开始使用 YARV(又一个 Ruby VM)。 , - 基于 MRI 的 ...

    guard-annotate:笔记

    在 Ruby 1.8.7、1.9.x、2.1.x 上测试 安装 安装宝石: gem install guard - annotate 将 gem 添加到您的 Gemfile 中: gem 'guard-annotate' 通过运行将保护定义添加到您的 Guardfile: guard init annotate ...

    rdio-simple:访问 Rdio Web 服务 API 的简单库

    简单的收音机 一组用于 Rdio 的 Web API 的简单客户端库。 这些用于 Python、PHP、Ruby、Node.js 和 Java 的库实现了与 Rdio 服务对话所需的 OAuth 子集,并且具有...测试套件依赖于ruby-1.9命令来运行 1.9 版的 ru

Global site tag (gtag.js) - Google Analytics