写点什么

用 Multiruby 检查 1.8 和 1.9 的兼容性

  • 2008 年 2 月 09 日
  • 本文字数:968 字

    阅读完需:约 3 分钟

从事 Ruby 类库或应用工作的开发者现在有了新的任务:确保不同 Ruby 版本间代码的兼容性。各种可选的 Ruby 实现是原因之一,不过它们的共同目标都是和 MRI 的工作方式保持一致。但是有了 Ruby 1.9 发布以后,情况就有了变化: Ruby 1.9 有了些不兼容性的变化,或是至少修改了一些代码的行为

例如,在 1.9 之前,Ruby 块中的本地变量存在着问题:

a = 1<br></br> foo.do_something {|a|<br></br>  a = 42<br></br> }<br></br> 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<br></br> 42<br></br>RESULT = 0<p>VERSION = 1.9.0-0</p><br></br> 1<br></br>RESULT = 0<p>TOTAL RESULT = 0</p><br></br> failures out of 2<p>Passed: 1.8.6-p111, 1.9.0-0 </p><br></br>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

2008 年 2 月 09 日 05:06360
用户头像

发布了 197 篇内容, 共 47.1 次阅读, 收获喜欢 15 次。

关注

评论

发布
暂无评论
发现更多内容

这4个Java异常框架,很多人竟然还不知道

比伯

Java 编程 架构 面试 计算机

SpringBoot-技术专题-Hystrix学习介绍

浩宇天尚

接口测试并不只是测试参数和返回值

测试人生路

接口测试

区块链IM即时社交通讯系统开发,区块链社交平台源码搭建

13530558032

【应用运维】公司业务迭代迅速,运维如何高效进行应用发布?

嘉为蓝鲸

可视化 PaaS 运维自动化 部署与维护 发布

K3d vs Kind 谁更适合本地研发

郭旭东

Kubernetes k3s kind

为什么容器内存占用居高不下,频频 OOM

996小迁

Java 架构 容器 面试 k8s

这才是图文并茂:我写了1万多字,就是为了让你了解AQS是怎么运行的

鄙人薛某

Java 并发编程 AQS 并发 ReentrantLock

go-zero 如何扛住流量冲击(一)

万俊峰Kevin

microservice go-zero goctl Go 语言

为什么有的专科程序员比本科程序员薪资高?他们之间有多大的区别?

Java架构师迁哥

基于Vue实现一个有点意思的拼拼乐小游戏

徐小夕

Java GitHub 开源 H5游戏 H5

影视剪辑类自媒体运营心得:如何抓住观众的痛点

石头IT视角

vscode + vim : vscode 全键盘使用方案

lmymirror

vim vscode Spacemacs

《深入理解java虚拟机》- java内存区域

never say never

JVM笔记 堆内存

懵了!一口气问了我18个JVM问题!

yes

面试 JVM

2020年底备战—从技术到面试合集

iOSer

ios 编程 面试

C++调用Go方法的字符串传递问题及解决方案

华为云开发者社区

c++ 内存 代码

备战2021年金三银四,阿里P8面试官梳理的2020年999道大厂高频Java面试题(附答案)

Java架构之路

Java 编程 程序员 架构 面试

渣本全力以赴33天,四面阿里妈妈(淘宝联盟),拿下实习岗offer

小Q

Java 学习 编程 架构 面试

惊喜!Alibaba架构师终于发布“微服务架构与实践”文档

Crud的程序员

架构 微服务

解读登录双因子认证(MFA)特性背后的TOTP原理

华为云开发者社区

算法 totp 密钥

适用初学者的5种Python数据输入技术

华为云开发者社区

Python 数据 函数

区块链币支付系统开发搭建,USDT支付平台源码

13530558032

7面阿里,最后一面居然挂在了JVM上面!狠下决心恶补JVM知识

Java架构之路

Java 程序员 架构 面试 编程语言

来不及解释了,快上车!LR.NET开发平台助力企业信息互联

雯雯写代码

微服务架构中的“参天大树”:SpringBoot+SpringCloud+Docker

小Q

Java 学习 容器 面试 微服务

史上最通俗Netty入门长文:基本介绍、环境搭建、动手实战

JackJiang

网络编程 Netty nio 即时通讯 IM

区块链交易所软件,数字货币场外交易系统搭建

13530558032

深圳区块链钱包系统开发,区块链钱包app源码

13530558032

奋力准备一个月成功进字节,来看一下我都看了哪些资料做了哪些准备

小Q

学习 编程 程序员 架构 面试

阿里P8大牛整理的300页图解网络知识+计算机底层操作系统

Java架构之路

Java 编程 程序员 架构 面试

用Multiruby检查1.8和1.9的兼容性-InfoQ