前回の RSpecによるRubyプログラムの単体テスト 記事ではRSpecを紹介しました。今回紹介するminitestは、Rubyの標準ライブラリに含まれていたこともある軽量なテスティングフレームワークです。
Ruby on Rails本体の開発ではminitestがテストライブラリに採用されています(Railsのテストコード例)。
ちなみにRubyテストライブラリの歴史および最近の動向については、以下の記事がわかりやすいと思います。
- Rubyのテスティングフレームワークの歴史(2014年版) - ククログ(2014-11-06)
- ruby 同梱の test-unit と minitest の今後 - HsbtDiary(2014-05-24)
今回の記事ではminitestの使い方を簡単に紹介したあと、TDD、Test Driven Development: テスト駆動開発)という開発手法を紹介します。
minitestのインストール・使い方
minitestは “minitest” というgemとして提供されているので、gem install minitest
もしくはGemfileに記載してbundle install
で使えるようになります。
以下のコード例では、本記事執筆時の最新バージョンであるminitest-5.5.1
を使用しますが、今後バージョンアップによって文法に違いが出る可能性も高いので注意して下さい。
簡単な使用例を以下に示します。
まずMinitest::Test
を継承したクラスを定義して、共通初期化処理(この例の場合はMyClassクラスのインスタンスをテストするためにMyClass.new
しています)はsetup
という名前のメソッドの中に書きます。
あとはtest_
から始まるメソッドを作成すれば、それがテストケースとして扱われます。
テストケースの中でassert_equal
というメソッドが呼ばれていますが、これは「第一引数と第二引数が等しいことを以てテスト成功とみなす」という意味です。
Module: MiniTest::Assertions (Ruby 2.0)
上のドキュメントで定義を見るとわかるようにassert_equal(exp, act)
という順なので、第一引数がexpectationつまり「そうあるべき結果」を用意しておき、第二引数にはactualつまり「実行すると実際はどうだったか(テストしたいコードの実行結果)」を記述します。後のページでいくつか文法のバリエーションを紹介します。
autorun
またrequire 'minitest/autorun'
という記述がありますが、autorunをrequireすると、ファイルを実行するだけでテストが実行されるようになります。試してみましょう。
テストが通過しているのがわかります。なおこれは単にrequire 'minitest'
のみを記述し、コード中でMinitest.autorun
を呼び出しても同じ効果が得られます。
次のページではassert_equal
以外のメソッドや、RSpec風のDSLが使えるminitest/spec
の解説を行います。