Ruby勉強します #Minitest
はじめに
前回から始めておりますRubyのお勉強です。
今回は開発において重要な事柄の一つ、テストについて勉強しました。
Rubyには標準でテスティングフレームワークが組み込まれているんですね。
その中でも紹介されていたMinitestについて学習しました。
前回に引き続き、伊藤淳一さん(@jnchito)の「プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで 」を参考にさせていただきました。
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)
- 作者: 伊藤淳一
- 出版社/メーカー: 技術評論社
- 発売日: 2017/11/25
- メディア: 大型本
- この商品を含むブログを見る
テストコード
まずは実際のテストコードから見てみます。
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と違い、元からテスティングフレームワークが組み込まれているということで、テストがより重要視されているなと感じました。
比較メソッドも上にあげたもの以外にもあるようなので、ゆっくりと見ていきたいと思います。
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)
- 作者: 伊藤淳一
- 出版社/メーカー: 技術評論社
- 発売日: 2017/11/25
- メディア: 大型本
- この商品を含むブログを見る