#はじめに
これは、プロを目指す人のためのRuby入門(チェリー本)を読んで理解を自分なりにまとめて書き記した物です。
個人的にわからない箇所を書き記したものとなっていますので、全て書いているわけではありません。
しかし、みんながつまずく箇所は似通っているのでは?と思うのでその点に関しては、要点を絞った内容が書けているのではと思います(たぶん)。
今回書くのは、その中でも『第3章:テストを自動化する』(Minitestの基本)についてです。
それでは、内容の方へ入りましょう!
#テストを自動化する
ここで学ぶ事は、
・Minitestの基本
です。
そして、テスト自動化とは名前の通り『勝手にテストを行ってくれて、ミスがないか確認してくれるものの事』です。
ミスがないかの確認を毎回毎回行うことは効率が悪いためです。
##●Minitestの基本
まずは、テスト用のフレームワークを用意します。
Rubyにおいてはそのフレームワークの一つとしてMinitestがあります。
Minitestを使うメリットは、
・Rubyと一緒にインストールされるため、セットアップが不要
・学習コストの低さ
・Railsのデフォルトのテスティングフレームワークのため、Railsを開発するときにも知識を生かしやすい。
今回のテストを行うにおいての簡単な手順としては、
1. Rubyプログラム(テストコード)を書く
2. テストコードの実行
3. テスティングフレームワークが結果をチェックして、結果報告
では、実際にテストコードを書いていってみましょう。
require 'minitest/autorun' # Minitestのライブラリの読み込み
class RubyTest < Minitest::Test
def test_ruby #メソッド名はtest_で始めるのが必須
assert_equal 'RUBY', 'ruby'.upcase #この部分が検証される部分。
#assert_equalはMinitestのメソッド。意味は後で説明
end
end
assert_equal 期待する結果, テスト対象となる値や式
この本で紹介されているのは、以下の3つのメソッド
(他にもメソッドは存在します。知りたい方は、MinitestのAPI公式ドキュメントへ)
#①aとbが等しければテストはパス
assert_equal b, a
#②aが真であればパス
assert a
#③aが偽であればパス
assert a
そして、先ほどのtest_ruby.rb
のテストを実行した結果が
$ ruby ruby_test.rb
Run options: --seed 35176
# Running:
. #←テストの進歩状況を表しています。(今回はテストメソッドが1個だけのためドットが一つだけ)
Finished in 0.000979s, 1021.4507 runs/s, 1021.4507 assertions/s. # テストの実行スピード
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
failuresとerrorsがどちらも0ならテストをパスしたことになります。
今回はテストにパスした例になりますが、次は失敗例をみてみましょう。
###●テストの実行結果、失敗例
require 'minitest/autorun'
class RubyTest < Minitest::Test
def test_ruby
assert_equal 'Ruby', 'ruby'.upcase # assert_equal 'Ruby'に変更
end
end
$ ruby ruby_test.rb
Run options: --seed 18225
# Running:
F
Failure:
RubyTest#test_ruby [ruby_test.rb:5]: ←ruby_test.rb:5からruby_test.rbの5行目でテストが失敗していることが確認できる。
Expected: "Ruby" ←期待された結果
Actual: "RUBY" ←実際の結果
rails test ruby_test.rb:4
Finished in 0.001320s, 757.5753 runs/s, 757.5753 assertions/s.
1 runs, 1 assertions, 1 failures, 0 errors, 0 skips
実行結果の説明をします。
今度はドットではなく、『F』に変わりましたが、これはFailureのFです。
その後は、どこで失敗したかが記載されています。
###●実行結果がエラーの場合
$ ruby ruby_test.rb
Run options: --seed 35712
# Running:
E
Finished in 0.001649s, 606.4282 runs/s, 0.0000 assertions/s.
1) Error:
RubyTest#test_ruby:
NoMethodError: undefined method `upcase' for nil:NilClass
Did you mean? case
ruby_test.rb:5:in `test_ruby'
1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
今度は、『F』だったところが、Errorの『E』へと変わりました。
- Error:以降はエラー内容の詳細になります。
1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
から、1件のエラーで終わったことが確認できました。