Make the Most of IT.

お酒と映画が好きなJava屋さんがRubyとか学んだこと感じたことをつらつらと

Ruby勉強します #Minitest

はじめに

前回から始めておりますRubyのお勉強です。
今回は開発において重要な事柄の一つ、テストについて勉強しました。

Rubyには標準でテスティングフレームワークが組み込まれているんですね。
その中でも紹介されていたMinitestについて学習しました。

前回に引き続き、伊藤淳一さん(@jnchito)の「プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発デバッグ技法まで 」を参考にさせていただきました。

テストコード

まずは実際のテストコードから見てみます。

require 'mintiest/autorun' #1

class SampleTest < Mintiest::Test
  def test_sample #2
    assert_equal 'RUBY', 'ruby.upcase' 
  end
end

#のついている箇所が特に重要です。
classや継承などもかなり重要ですが、もうしばらく後に学習予定です。

#1 ライブラリを読み込む

require 'minitest/autorun'

requireは標準ライブラリを読み込むためのキーワードです。
minitestは組み込みライブラリでないため、requireで明示的に読み込む必要があります。

Javaで言えばimportに当たるでしょうか。
Stringはimportしなくてもいいけれど、Listはimportしないと使えないといった感じです。

#2 実行結果比較用メソッドを定義する

  def test_sample
    assert_equal 'RUBY', 'ruby.upcase' 
  end

まずメソッド名ですが、Minitestは"test"から始まるメソッドを実行するので、メソッド名の頭に"test"をつけることが必須です。

実際の比較はassert_equalメソッドにて行なっています。
Javaでいうと、Junitのassertメソッドのようなものですね。

また、Junitと同様にMinitestにもassertに複数の種類があります。

Minitestの比較メソッド
#それぞれの引数が等しければOK
assert_equal a,b

#引数が真ならばOK
assert a

#引数が偽ならばOK
refute a
Junitの比較メソッド
// asser_equalと同じ
assertEquals(a,b);

// assertと同じ
assertTrue(a);

// refuteと同じ
assertFalse(a);

実行結果

テストコードがかけたら実行して見ます。

Run options: --seed 64846

# Running:

.

Finished in 0.000631s, 1584.7860 runs/s, 1584.7860 assertions/s.

1 runs, 1 assertions, 0 failures, 0 errors, 0 skips

実行結果でまず見るのは最下行です。
それぞれの意味は以下となっています。 |キーワード|意味| |-|-| |run|実行したテストメソッドの件数| |assertions|実行した検証メソッドの数| |failures|失敗したテストメソッドの件数| |errors|検証中にエラーが発生したテストメソッドの数| |skips|skipメソッドによりskipされたテストメソッドの件数|

failuresとerrorsが0となっていればそのテストはすべてOKということになります。

最後に

ということで、Minitestについて学習したことをまとめてみました。
Javaと違い、元からテスティングフレームワークが組み込まれているということで、テストがより重要視されているなと感じました。
比較メソッドも上にあげたもの以外にもあるようなので、ゆっくりと見ていきたいと思います。