分かりやすく解説するため、以下の流れで最小単位の使い方から、徐々に増やしていって解説します。
- Minitestのテストファイル単体
- Minitestのテストファイル + 同一ファイル内で作成したメソッド
- Minitestのテストファイル + 別ファイルのメソッド
Minitestのテストファイル単体
テストコード単体での動作を見るために、RubyのStringクラスのメソッドであるchop
メソッドを用いて、テストコードを作っていきます。
chop
:文字列の最後の1文字を削除する、ただし\r\nの場合は\r\nを削除する
まずはテストコードを見ていきましょう。
require 'minitest/autorun'
class SampleTest < Minitest::Test
def test_chop
assert_equal "string", "string\r\n".chop
end
end
解説です。
- クラス名とファイル名は同一にしましょう。ただしクラス名はアッパーキャメルケース、ファイル名はスネークケースです。
- メソッド名は必ず、
test
から始まるようにします。Minitestではテスト実行時に、test
から始まるメソッドの実行を行うためです。 -
assert_equal 正しい値, 比較対象
という記述で、テストしたいものを書きましょう。
このテストファイルを実行すると、結果は以下のようになります。
実行結果
qiita> ruby .\sample_test.rb
Run options: --seed 19064
# Running:
.
Finished in 0.004947s, 202.1468 runs/s, 202.1468 assertions/s.
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips # < テスト結果
最終行にテスト結果が表示されます。
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
実行1でテスト成功が1となります。
さて、ここまではRuby標準のメソッドを試しただけです。本来は開発者が実装したメソッドのテストを行う目的で使います。
次は、自分で作成したメソッドをテストします。
Minitestのテストファイル + 同一ファイル内で作成したメソッド
本来の使い方である、実装したメソッドをテストする方法です。
ここでは、3の倍数のときだけNabeatsu
を返すnabeatsu
メソッドを作成し、動作をテストします。
コードは以下のようになります。
サンプルコード
require 'minitest/autorun'
class SampleTest < Minitest::Test
def test_chop
assert_equal "string", "string\r\n".chop
end
def test_nabeatsu
assert_equal "1", nabeatsu(1)
assert_equal "2", nabeatsu(2)
assert_equal "Nabeatsu", nabeatsu(3)
assert_equal "4", nabeatsu(4)
assert_equal "5", nabeatsu(5)
assert_equal "Nabeatsu", nabeatsu(6)
end
end
def nabeatsu(num)
if num % 3 == 0
'Nabeatsu'
else
num.to_s
end
end
実行結果
qiita> ruby .\sample_test.rb
Run options: --seed 21318
# Running:
..
Finished in 0.005245s, 381.3155 runs/s, 1334.6044 assertions/s.
2 runs, 7 assertions, 0 failures, 0 errors, 0 skips
Minitestのテストファイル + 別ファイルのメソッド
さて、実際に使うのはこちらのパターンです。
先ほど作成したnabeatsu
メソッドを、別ファイルに移動してテストしましょう。
サンプルコード nabeatsu.rb
def nabeatsu(num)
if num % 3 == 0
'Nabeatsu'
else
num.to_s
end
end
サンプルコード sample_test.rb
require 'minitest/autorun'
require './lib/qiita/nabeatsu'
class SampleTest < Minitest::Test
def test_chop
assert_equal "string", "string\r\n".chop
end
def test_nabeatsu
assert_equal "1", nabeatsu(1)
assert_equal "2", nabeatsu(2)
assert_equal "Nabeatsu", nabeatsu(3)
assert_equal "4", nabeatsu(4)
assert_equal "5", nabeatsu(5)
assert_equal "Nabeatsu", nabeatsu(6)
end
end
解説です。
- nabeatsuメソッドは別ファイルに移動したので、requireでインポートしてくる必要があります。
そして、実行結果は以下になります。
実行結果
qiita> ruby sample_test.rb
Run options: --seed 32452
# Running:
..
Finished in 0.005215s, 383.5459 runs/s, 1342.4106 assertions/s.
2 runs, 7 assertions, 0 failures, 0 errors, 0 skips
これで、Minitestを使ったテストが最低限出来るようになりました。