[Ruby]Ruby本体のテストフレームワークの歴史(移り変わり)について
Rubyのテストフレームワーク
Rubyにはデフォルトでテストフレームワークが入っていますが、versionによってその中身が変移していっているのでその説明です。はじめに
これは以下のクリアコードさんのページを自分なりに噛み砕いたものになっています。http://www.clear-code.com/blog/2014/11/6.html
テストフレームワークの歴史
- Test::Unit (v1.8-v1.9.0, v2.1-)
- 過去のversionまでRuby本体に入っていたテストフレームワーク
- requireするときに require "test/unit"と書くことからtest/unitと呼ばれていた(v1.8の時代)
- 複雑すぎてメンテナンスできないために、Ruby本体から外れる。その代わりにminitestがRuby本体に入る(v1.9.1)
- minitest(v1.9.1-)
- Test::Unitに変わってRuby本体に入ったテストフレームワーク
- ただしTest::Unit互換APIを持つので以前のテストコードがそのまま使える(v2.1まで)
- 2.1時点で上記の互換性をなくしたminitest5をリリース
- test-unit
(移動前) lib/minitest/*.rb lib/test/unit.rb lib/test/unit/**/*.rb (移動後) test/lib/minitest/*.rb test/lib/test/unit.rb test/lib/test/unit/**/*.rb
test/unit
Ruby本体に入っているtest/unit/以下のファイル。時期によって内容が違う(RVMでinstallした場合/usr/local/rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/test)
Ruby 1.8 : Test::Unitのこと Ruby 1.9.1 : minitest用のTest::Unit互換API Ruby 2.1 : minitest5でTest::Unit互換APIが使えなくなったので、延命でtestディレクトリをきって古いminitest4と互換APIをのこした。このぎりぎり生き残った互換APIのこと Ruby 2.2 : minitest5でTest::Unit互換APIが使えなくなったので、Test::Unitのテストを使い続けられるように再導入されたTest::Unitのgem(test-unit) (ソースからビルドした場合/usr/local/lib/ruby/gems/2.2.0/gems/test-unit-3.0.6/lib/test/unit.rb)
Ruby2.2では・・・
- 最新版minitestが導入される予定(⇒Test::Unit互換API使えない)
- 最新版test-unitが導入される予定(⇒こっちはTest::Unit記法のテストが使える)
えっと、つまり・・・?
- Ruby2.1まではrequire "test/unit"はminitestのAPIを呼んでいた
- 今まではUnit::Test互換があったからよかった
- でも2.2からは互換がなくなったから、Unit::Test記法で書いていた場合は今までのテストコードは使えなくなる
- test-unit(Test::Unitのgem版)を使うようにすればいい
require 'test/unit/testcase' require 'test/unit/autorunner' module Test # :nodoc: # # = Test::Unit - Ruby Unit Testing Framework # # == Introduction # # Unit testing is making wa ・ ・ ・