总结 | 如何测试你自己的 RubyGem
如何测试一个Gem
gem 开发完了,想要给别人用,那就需要测试啊,测试一个 gem 其实很简单,这里我们用 minitest 为例, rspec 也一样适用。先来看看我们当前这个 gem 的目录结构:
-rw-rw-r-- 1 lizhe lizhe 90 7月 2 15:52 Gemfile
-rw-rw-r-- 1 lizhe lizhe 379 7月 3 10:09 Gemfile.lock
drwxrwxr-x 3 lizhe lizhe 4096 7月 2 15:52 lib
-rw-rw-r-- 1 lizhe lizhe 1062 7月 2 15:52 LICENSE.txt
-rw-rw-r-- 1 lizhe lizhe 923 7月 3 10:09 mygem.gemspec
drwxrwxr-x 2 lizhe lizhe 4096 7月 2 18:33 pkg
-rw-rw-r-- 1 lizhe lizhe 187 7月 3 10:35 Rakefile
-rw-rw-r-- 1 lizhe lizhe 556 7月 2 15:52 README.md
打开 mygem.gemspec ,添加minitest:
spec.add_development_dependency "minitest", "~> 5.7.0"
执行bundle install安装minitest。
新建一个test文件夹,存放我们的测试的用例,然后新建一个test_helper.rb文件,放在里面。test_helper.rb的内容如下:
$LOAD_PATH << "./lib" # 把lib添加到load path
require 'minitest/autorun' # 引进minitest
require 'mygem'
再来新建一个测试用例,test_mygem.rb:
require "test_helper"
class MygemTest < Minitest::Test
def test_hello_output
assert_equal(Mygem.hello, "hello from my gem")
end
end
现在就来执行测试吧:
$ ruby test/test_mygem.rb
/home/lizhe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- test_helper (LoadError)
from /home/lizhe/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from test/test_mygem.rb:1:in `<main>'
出错了!找不到test_helper,因为它没有在加载路径里嘛,那就来换个方式,require_relative 'test_helper',因为我们的命令是在 gem 根目录下的,所以相对路径就是当前的路径,如果是在 test 目录下执行,就需要写成require_relative '../test_helper'了,还挺麻烦。好,执行一下试一试:
$ ruby test/test_mygem.rb
Run options: --seed 30741
# Running:
.
Finished in 0.000793s, 1260.9959 runs/s, 1260.9959 assertions/s.
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
利用 Rake::TestTask 简化测试流程
前面的测试方法中,我们要手动添加 lib 目录到 load path ,然后在每个测试用例文件中要require_relative 'test_helper',很是麻烦,现在来简化这一个流程。
首先添加 Rake::TestTask 到 Rakefile 中:
require 'rake/testtask'
Rake::TestTask.new do |t|
t.libs << 'test' << 'lib'
t.pattern = "test/test_*.rb"
end
现在把 testhelper 中的$LOADPATH << './lib'去掉,再把测试用例文件中的 require_relative 替换为 require ,因为rak test task已经把 test 和 lib 两个目录都添加到 load path 中了,然后执行rake test:
$ rake test
Run options: --seed 29947
# Running:
.
Finished in 0.000969s, 1031.6447 runs/s, 1031.6447 assertions/s.
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
进一步简化,每个测试用例文件都要require 'test_helper',也是够麻烦的,能不能让它自动执行这个动作呢?可以,只需要再加上一个选项即可:
require 'rake/testtask'
Rake::TestTask.new do |t|
t.libs << 'test' << 'lib'
t.pattern = "test/test_*.rb"
t.ruby_opts << "-r test_helper" # 添加ruby运行参数,require指定的文件
end
现在把测试用例中的require 'test_helper'这一行也去掉,执行rake test,同样可以运行测试,又少写了一行,:smile :
现在来设置默认的 task :
require 'rake/testtask'
Rake::TestTask.new do |t|
t.libs << 'test' << 'lib'
t.pattern = "test/test_*.rb"
t.ruby_opts << "-r test_helper" #
添加 ruby 运行参数,require指定的文件
end
task :default => :test
这样我就可以直接执行 rake 就可以跑测试了,连那个 test 都省了。
如果我们有多个测使用例,这个 rake test task 会跑所有测试,如果想跑指定的某一个怎么做呢?指定一个 TEST 参数即可:
rake test TEST=test/test_mygem.rb
参考链接:
本文系OneAPM工程师李哲原创文章。想阅读更多技术文章,请访问OneAPM官方技术博客。
总结 | 如何测试你自己的 RubyGem的更多相关文章
- rails创建项目,部署,测试流程(rails5.0+ruby2.3.1)
rails new test_app --skip-test-unit 不生成默认的test,稍后用rspeccd test_app 修改Gemfile(大部分为自动生成) source 'https ...
- 如何开发一个自己的 RubyGem?
「如何测试你的 RubyGem?」的前导文章 什么是 RubyGem RubyGem 是 Ruby 语言的标准源码打包格式. 大家一直都在用gem这个命令,但是很少有人知道这个东西是怎么来的,这里我从 ...
- 使用calabash测试开源中国Android客户端
Calabash-android是支持android的UI自动化测试框架,前面已经介绍过<中文Win7下成功安装calabash-android步骤>,这篇博文尝试测试一个真实应用:开源中 ...
- Redis集群的安装测试(伪分布模式 - 主从复制)
想跑一下Redis集群,但是没有那么多服务器,所以使用伪分布式模式,模拟一下,记录一下安装过程. 软件: redis-3.0.3.tar.gz 集群正常工作至少需要3个主节点(本示例创建6个节点,3主 ...
- docker实战——在测试中使用Docker
在之前几章中介绍的都是Docker的基础知识,了解什么是镜像,docker基本的启动流程,以及如何去运作一个容器等等. 接下来的几个章节将介绍如何在实际开发和测试过程中使用docker. 将Docke ...
- SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]
目录 SignalR系列目录 前言 也是好久没写博客了,近期确实很忙,嗯..几个项目..头要炸..今天忙里偷闲.继续我们的小系列.. 先谢谢大家的支持.. 我们来聊聊SignalR的性能监测与服务器的 ...
- Apache Ignite之集群应用测试
集群发现机制 在Ignite中的集群号称是无中心的,而且支持命令行启动和嵌入应用启动,所以按理说很简单.而且集群有自动发现机制感觉对于懒人开发来说太好了,抱着试一试的心态测试一下吧. 在Apache ...
- 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率
之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...
- TechEmpower 13轮测试中的ASP.NET Core性能测试
应用性能直接影响到托管服务的成本,因此公司在开发应用时需要格外注意应用所使用的Web框架,初创公司尤其如此.此外,糟糕的应用性能也会影响到用户体验,甚至会因此受到相关搜索引擎的降级处罚.在选择框架时, ...
随机推荐
- 008-python基础-数据类型
一.基本数据类型: 数字 int 字符串 str 布尔值 bool 真或假 1或0 列表 list 元组 tuple (不可变列表) 字典 dict (无序)
- AsyncTask和Handler两种异步方式的实现和区别比较
1 AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以 ...
- hud 2586 How far away ?
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2586 How far away ? Description There are n houses in ...
- android asmack 注册 登陆 聊天 多人聊天室 文件传输
XMPP协议简介 XMPP协议(Extensible Messaging and PresenceProtocol,可扩展消息处理现场协议)是一种基于XML的协议,目的是为了解决及时通信标准而提出来的 ...
- 十一、从头到尾彻底解析Hash 表算法
在研究MonetDB时深入的学习了hash算法,看了作者的文章很有感触,所以转发,希望能够使更多人受益! 十一.从头到尾彻底解析Hash 表算法 作者:July.wuliming.pkuoliver ...
- 数据持久化-Plist文件写入
数据持久化,常见4种:归档,plist文件,sqlite,coreData.今天复习的是plist文件读写. // // ViewController.m // Test_Plist // // Cr ...
- H5 input type="search" 不显示搜索 解决方法
在IOS(ipad iPhone等)系统的浏览器里打开H5页面.如下写法: <input type="search" name="search” id=" ...
- 无法解决“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”与“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”之间的冲突。正在随意选择“Newtonsoft.Jso
今天的程序莫名报错: 无法解决“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed” ...
- Android编程: fragment组件、菜单和Intent组件
学习内容:fragment组件.菜单和Intent组件 ====fragment组件====1.fragment是一种自我容纳,模块化的,嵌入在一个Activity里面的视图组件 可以在运行时动 ...
- scrapy 错误
1. 安装win32时候 Unable to find vcvarsall.bat 解决方法: 1.如果你没有安装vc,去微软下个 VS2008 的免费版就能解决此问题. 2.如果你安装的是VS201 ...