1. test-unit
はじめの一歩
テストユニットを使ってみましょう。
この文書はsample
というgemパッケージを作成しtest-unit
を利用する方法について解説します。
2. bundlerとtest-unitのインストール
- 最初にgemの雛形を生成する
bundler
をインストールします。 - 次に、
test-unit
をインストールします。
gem install bundler
gem install test-unit
gem list
コマンドでインストールしたパッケージを確認します。
インストールが成功すると、次のような行が出力されます。
gem list
...
bundler (1.14.6)
...
test-unit (3.2.3)
3. gemテンプレートの作成
次にbundler
コマンドを使ってgemの雛形を作成します。
このコマンドはテストに必要な雛形も生成することができますが、
現在は、test-unit
のためのテンプレートを生成することはできません。
そのため、まずminitest
というテストフレームワークのテンプレートを作成し
(このフレームワークはunit-test
に似ています。)
その後いくつかのファイルをtest-unit
用に修正します。
bundle gem -t minitest sample
を実行すると次のファイルを生成します。
.
|-- Gemfile
|-- README.md
|-- Rakefile
|-- bin
| |-- console
| `-- setup
|-- lib
| |-- sample
| | `-- version.rb
| `-- sample.rb
|-- sample.gemspec # <- 修正
`-- test
|-- sample_test.rb # <- 修正
`-- test_helper.rb # <- 修正
4. test-unit
用にファイルを修正する
4.1 gemspecの編集
sample.gemspec
ファイルを次のように修正します。
minitest
の行を、test-unit
に修正します。
修正前
spec.add_development_dependency "minitest", "~> 5.0"
修正後
spec.add_development_dependency "test-unit", "~> 3.2.3"
4.2 test/test_helper.rb
の修正
次にtest/test_helper
ファイルを修正します。
修正前
$LOAD_PATH.unshift File.('../../lib', __FILE__)
require 'sample'
require 'minitest/autorun' # <-- この行を修正します。
修正後
$LOAD_PATH.unshift File.('../../lib', __FILE__)
require 'sample'
require 'test/unit' # <-- 修正後
4.3 Rakefile(修正不要)
このファイルは修正不要です。 ファイルの中身は次のようになっています。
require "bundler/gem_tasks"
require "rake/testtask"
Rake::TestTask.new(:test) do |t|
t.libs << "test"
t.libs << "lib"
t.test_files = FileList['test/**/*_test.rb']
end
task :default => :test
4.4 test/sample_test.rb
の修正
bundlerコマンドは、test/sample_test.rb
を作成します。
このファイルはminitest
用のテンプレートになっています。
test-unit
用に修正します
修正前
require 'test_helper'
class SampleTest < Minitest::Test # <- ここを修正します
def test_that_it_has_a_version_number
refute_nil ::Sample::VERSION
end
def test_it_does_something_useful
assert false
end
end
修正後
require 'test_helper'
class SampleTest < Test::Unit::TestCase # <- 修正後
def test_that_it_has_a_version_number
refute_nil ::Sample::VERSION
end
def test_it_does_something_useful
assert false
end
end
5. テストの実行
rake test
コマンドを実行するとtest
ディレクトリの下にあるテストを実行します。
二つのテストを実行し、一つは成功、もう一つは失敗します。
rake test
Loaded suite
/path/to/ruby/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/rake_test_loader
Started
F
================================================================================
Failure: <false> is not true.
test_it_does_something_useful(SampleTest)
/path/to/sample/test/sample_test.rb:9:in `test_it_does_something_useful'
6: end
7:
8: def test_it_does_something_useful
=> 9: assert false
10: end
11: end
================================================================================
.
Finished in 0.011521 seconds.
--------------------------------------------------------------------------------
2 tests, 2 assertions, 1 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
50% passed
--------------------------------------------------------------------------------
173.60 tests/s, 173.60 assertions/s
rake aborted!
Command failed with status (1)
Tasks: TOP => test
(See full trace by running task with --trace)
6. オリジナルのテストを作る
次のルールに従ってオリジナルのテストを作成します。
test
ディレクトリの下にテストを作成します。- ファイルの名前は、xxx_test.rbのようにします。
- テストは
sub/test
のようなサブディレクトリに置くこともできます。
ディレクトリレイアウトの例
test
|-- sample_test.rb
|-- sub
| `-- sample2_test.rb
`-- test_helper.rb
サブディレクトリ内のテスト例
require 'test_helper'
module Sub
class Sample2Test < Test::Unit::TestCase
def test_that_it_has_a_version_number
refute_nil ::Sample::VERSION
end
def test_it_does_something_useful
assert false
end
end
end
7. 詳細な情報
公式のドキュメントを参照してください。