如何运行Ruby核心测试用例?含Hash#dig spec及C编写测试的本地执行方法
嘿,我来给你详细讲讲怎么运行Ruby核心的测试用例,不管是Ruby写的spec还是C实现的测试,步骤都很清晰,刚好适合你修改Ruby源码后验证自己的改动:
一、先搞定本地Ruby源码环境
首先你得把Ruby的源码拉到本地,编译出自己的Ruby版本——毕竟你要修改Ruby本身,肯定得用自己编译的版本来测试对吧?
- 克隆源码仓库:
git clone https://github.com/ruby/ruby.git - 进入源码目录:
cd ruby - 安装编译依赖:不同系统不一样,比如Ubuntu可以用
sudo apt-get install build-essential autoconf bison ruby,macOS用Homebrew装brew install autoconf bison就行 - 编译本地Ruby:执行
./autogen.sh && ./configure && make。如果需要调试代码,建议加--enable-debug参数,也就是./configure --enable-debug,这样后续调试会方便很多
二、运行Ruby编写的核心Spec(比如Hash#dig的测试)
Ruby核心的大部分测试都是用RSpec风格写的spec文件,就像你提到的Hash#dig的测试,放在spec/ruby/core/hash/目录下。
- 单独运行单个spec文件:直接用你刚编译好的Ruby执行它,记得把spec目录加入加载路径,不然找不到测试需要的辅助代码:
./ruby -I./spec ./spec/ruby/core/hash/dig_spec.rb - 运行整个模块的spec:如果想测试Hash模块的所有spec,直接指定目录就行:
./ruby -I./spec ./spec/ruby/core/hash - 运行所有核心spec:要是想跑全部核心测试,用
make spec就行,但这个会很慢,一般改完代码测单个文件就够了
三、运行C语言编写的测试用例
Ruby底层很多功能是C实现的,对应的测试要么是C写的,要么是Ruby脚本调用C功能来测试,这些测试主要放在test目录下:
- 运行单个C相关测试脚本:比如测试Hash的C实现逻辑,可以直接运行对应的测试脚本:
要是测试某个内置扩展的C代码,比如./ruby ./test/ruby/test_hash.rbstring扩展,就去对应的目录运行测试:./ruby -I./ext/string/lib ./test/ext/string/test_string.rb - 运行所有C相关测试:用
make test就能跑大部分底层测试,覆盖C实现的功能
四、几个实用测试小技巧
- 修改源码后记得重新编译:每次改了C代码或者Ruby核心库的代码,都要重新执行
make,不然测试用的还是旧版本的Ruby - 过滤单个测试用例:要是只想跑spec里的某一个测试例子,比如dig_spec.rb里的某个场景,用
--example参数指定关键词就行:./ruby -I./spec ./spec/ruby/core/hash/dig_spec.rb --example "returns nil for non-existent key" - 调试测试:如果编译时开了调试模式,用
gdb或者lldb就能一步步调试测试过程,比如:gdb --args ./ruby -I./spec ./spec/ruby/core/hash/dig_spec.rb
内容的提问来源于stack exchange,提问作者Brian Kung
相关产品推荐
相关产品推荐

