Ruby 標準のユニットテスト(単体テスト)フレームワーク Test::Unit, Minitest::Unit についてです。 Ruby でのユニットテストには、最近流行り(?)の振舞駆動開発に特化した RSpec や、他にも色々あります。
ユニットテストとは、プログラム単体のテストのことです。 システム開発経験者ならわかると思いますが、 要件定義→概要設計→詳細(PG)設計→製造→単体テスト→結合テスト→総合テスト→運用テスト→保守(案件・開発環境等によって異なりますが) の1工程です。
Test::Unit は Ruby 1.8 系では標準でしたが、1.9 系では Minitest::Unit で再実装されています。 ですから、今回の当方の環境 Ruby 1.9.3 では Minitest::Unit を実装しています。
以下、テスト方法についての記録です。
作業記録
1. テスト対象スクリプト作成
当然ですが、テストを実行する対象になるスクリプトを作成します。 例にならって以下のように作成してしました。 【 ファイル名:foo.rb 】
1 2 3 4 5 6 7 8 9 |
|
bar はテストでエラーになるように意図的に誤った定義をしています。
2. ユニットテスト用スクリプト作成
ユニットテスト用のスクリプトを作成します。 これも例にならって以下のように作成しました。 【 ファイル名:test_foo.rb 】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
- テストを実行するメソッドの名前は “test” で始まる必要があるようです。
- MiniTest::Unit.autorun の代わりに require ‘minitest/autorun’ を記述しても良いようです。
- setup は、各テストケースの実行前に実行するメソッドです。
- teardown は、各テストケースの実行後に実行するメソッドです。(あまり使わないようです)
- assert_equal(expected, actual, message = nil) は、与えられた期待値と実際の値が等しいか否かをテストします。
※他にどんな Assertion があるのかは module MiniTest::Assertions を参照。
3. ユニットテストの実行
作成したユニットテストスクリプトを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
test_foo.rb の20行目で “bar” を期待していたのに “foo” が返ってきた、と言っています。 テストができているようです。
参考サイト
- Rubyアソシエーション: テスト
- library test/unit
- library minitest/unit
- module MiniTest::Assertions
- test-unit - Ruby用単体テストフレームワーク
以上。