日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

总结 | 如何测试你自己的 RubyGem

發布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 总结 | 如何测试你自己的 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 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::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 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。