如何测试一个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 pathrequire 'minitest/autorun'  # 引进minitest
require 'mygem'

再来新建一个测试用例,test_mygem.rb

require "test_helper"class MygemTest < Minitest::Testdef test_hello_outputassert_equal(Mygem.hello, "hello from my gem")endend

现在就来执行测试吧:

$ 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.rbRun 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::TestTaskRakefile 中:

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 testRun 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指定的文件
endtask :default => :test

这样我就可以直接执行 rake 就可以跑测试了,连那个 test 都省了。

如果我们有多个测使用例,这个 rake test task 会跑所有测试,如果想跑指定的某一个怎么做呢?指定一个 TEST 参数即可:

rake test TEST=test/test_mygem.rb

参考链接:

  • Rake::TestTask

本文系OneAPM工程师李哲原创文章。想技术文章,请访问OneAPM官方技术博客。

转载于:https://www.cnblogs.com/oneapm/p/4627041.html

总结 | 如何测试你自己的 RubyGem相关推荐

  1. 使用docker构建并测试一个基于Sinatra的Web应用程序

    内容来自<第一本Docker书>5.2节和博文整理而成 使用Docker构建并测试Web应用程序 在这个例子里,我们将创建一个应用程序,它接收输入的URL参数,并以JSON散列的结构输出到 ...

  2. docker实战——在测试中使用Docker

    在之前几章中介绍的都是Docker的基础知识,了解什么是镜像,docker基本的启动流程,以及如何去运作一个容器等等. 接下来的几个章节将介绍如何在实际开发和测试过程中使用docker. 将Docke ...

  3. 使用Docker构建并测试web应用程序

    使用Docker构建并测试web应用程序 构建Sinatra应用程序 构建Dockerfile FROM ubuntu:lastest MAINTAINER James Turnbull james@ ...

  4. locust入门:单机使用locust运行压力测试

    locust的官方文档在这里: http://docs.locust.io/en/stable/ 前置:locust的测试脚本使用为python(若未安装python环境,可以搜索安装python) ...

  5. HA: InfinityStones靶机渗透测试

    文章目录 靶机信息 一.信息收集 1.主机发现 2.端口扫描 3.目录扫描 二.漏洞挖掘 1.访问 192.168.1.108 2.访问 /img 目录 3.访问 https 服务(443)端口 4. ...

  6. HA: Forensics靶机渗透测试

    文章目录 靶机说明: 一.信息收集 1.主机发现 2.端口扫描 二.漏洞挖掘 1.访问靶机 web 服务 2.使用 dirb 进行目录扫描 3.使用 exiftool 提取数据 4.使用 dirb 扫 ...

  7. YOLOv4 资源环境配置和测试样例效果

    YOLOv4 资源环境配置和测试样例效果 基本环境:cuda=10.0,cudnn>=7.0, opencv>=2.4 一.下载yolov4 git clone https://githu ...

  8. 大数据调度平台Airflow(八):Airflow分布式集群搭建及测试

    目录 Airflow分布式集群搭建及测试 一.节点规划 二.airflow集群搭建步骤 1.在所有节点安装python3.7 2.在所有节点上安装airflow 三.初始化Airflow 1.每台节点 ...

  9. 2021年大数据ELK(九):使用VSCode测试分词器

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 使用VSCode测试分词器 一.准备VSCode开发环境 1.打开VSCode ...

最新文章

  1. vb.net与c#相互转换工具
  2. 25个提高网站可用性和转化率的工具
  3. yum php devel_yum源里找不到 php54w-devel,求可用yum源
  4. 2021年软考考试时间公布
  5. ITK:警告定向到文件
  6. 盛大EverBox网盘
  7. 当我们在谈论技术时,技术的本质和价值究竟是什么?
  8. oracle job 每月前十天运行_Tensorflow源码解析7 -- TensorFlow分布式运行时
  9. 服务器给文件权限命令,chmod命令详细用法设置文件的权限
  10. mysql导入数据dmp文件怎么打开_如何在oracle中导入dmp数据库文件
  11. 大数据网站汇总(数据搜集、大数据竞赛、)
  12. 怎么用java打开pkg文件怎么打开,pkg文件怎么打开 【处置方式】
  13. 计算机两字符是多少磅,word字符磅 word里一个字符等于多少磅
  14. DedeCMS二次开发 - 文件结构了解
  15. 《大道至简——软件工程实践者的思想》读书笔记
  16. SQL数据库笛卡尔积、投影、选择、连接运算
  17. COM组件 ATL的创建和调用
  18. 人工智能 | ShowMeAI资讯日报 #2022.06.22
  19. rxjava 常用用法实例
  20. mysql数据库data目录下文件说明

热门文章

  1. 又肝了下微服务 API 网关“金刚”,也是蛮香的~
  2. Spring Boot Elasticsearch 入门
  3. Redis 的主从复制太强大了!
  4. 干货|kafka最佳实践
  5. 是什么影响了MySQL性能?
  6. http如何像tcp一样实时的收消息?
  7. Redux 核心概念
  8. 多线程:线程之间的协作(join、wait、notify、notifyAll、await、signal、signalAll)
  9. Android --- 单一控件覆盖其他控件的方法
  10. 怎么样给单选按钮前面插入小图标