前回の RSpecによるRubyプログラムの単体テスト 記事ではRSpecを紹介しました。今回紹介するminitestは、Rubyの標準ライブラリに含まれていたこともある軽量なテスティングフレームワークです。

seattlerb/minitest - GitHub

Ruby on Rails本体の開発ではminitestがテストライブラリに採用されています(Railsのテストコード例)。

ちなみにRubyテストライブラリの歴史および最近の動向については、以下の記事がわかりやすいと思います。

今回の記事では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の解説を行います。