BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

用Multiruby检查1.8和1.9的兼容性

| 作者 Werner Schuster 关注 6 他的粉丝 ,译者 李剑 关注 1 他的粉丝 发布于 2008年2月10日. 估计阅读时间: 3 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。
从事Ruby类库或应用工作的开发者现在有了新的任务:确保不同Ruby版本间代码的兼容性。各种可选的Ruby实现是原因之一,不过它们的共同目标都是和MRI的工作方式保持一致。但是有了Ruby 1.9发布以后,情况就有了变化:Ruby 1.9有了些不兼容性的变化,或是至少修改了一些代码的行为

例如,在1.9之前,Ruby块中的本地变量存在着问题:
 a = 1
 foo.do_something {|a|
 a = 42
 }
 puts a
在Ruby 1.8中,这段代码会打印出“42”, 因为块变量a和所包含域中的a就是一个变量。Ruby 1.9解决了这个问题,块的行为和人们的预期达成了一致,也就是打印出“1”。所以,如果某个类库或者应用的代码依赖于旧的行为,那它在Ruby 1.9中的表现肯定就不一样了。

Zentest包中的Multiruby可以有助于避免这个问题。Zentest的创建者Ryan Davis解释了怎样用Multiruby处理Ruby 1.8和1.9
现在有了1.9,该讨论一下怎样用Multiruby来进行多版本测试了。Multiruby在Zentest家族内的知名度不太高。它会自动构建并在内部安装多个ruby版本,并向所有版本发送多重命令,这样你就可以同时贯穿多个ruby版本执行测试。
安装Zentest很简单:
gem install ZenTest 
Multiruby的工作机制如下:
  • 它会下载Ruby版本——如1.8和1.9——并进行编译
  • 然后它会在每个可用的Ruby版本上执行它的参数
multiruby这个命令会将所有给定的参数传递给Ruby二进制文件。运行上面的代码示例会得到如下的输出:
VERSION = 1.8.6-p111
 42
RESULT = 0

VERSION = 1.9.0-0
 1
RESULT = 0

TOTAL RESULT = 0
 failures out of 2

Passed: 1.8.6-p111, 1.9.0-0
Failed:
可以看到:在1.8.x上面的输出结果是“42”,但是在1.9上面就变成了“1” (上面的“RESULT”是Ruby解释器的退出代码)。

通常,Multiruby只用来在大部分代码都被测试覆盖的情况下找出问题所在。但是如今Ruby正是一个英雄辈出的时代,像JRuby 1.0和1.1、IronRuby还有Rubinius如雨后春笋般纷纷涌现,有一个可以简化跨运行时测试的工具正是当务之急。

你已经开始向Ruby 1.9移植你的应用,或至少是开始在Ruby 1.9上测试你的类库或者应用了吗?

查看英文原文Checking 1.8 vs 1.9 compatibility with Multiruby

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT