LoginSignup
2
0

Rubyの『テスト自動化』(Minitest)について、簡単にまとめてみた。

Last updated at Posted at 2020-04-26

#はじめに
これは、プロを目指す人のためのRuby入門(チェリー本)を読んで理解を自分なりにまとめて書き記した物です。
個人的にわからない箇所を書き記したものとなっていますので、全て書いているわけではありません。
しかし、みんながつまずく箇所は似通っているのでは?と思うのでその点に関しては、要点を絞った内容が書けているのではと思います(たぶん)。

今回書くのは、その中でも『第3章:テストを自動化する』(Minitestの基本)についてです。

それでは、内容の方へ入りましょう!

#テストを自動化する
ここで学ぶ事は、
・Minitestの基本
です。

そして、テスト自動化とは名前の通り『勝手にテストを行ってくれて、ミスがないか確認してくれるものの事』です。
ミスがないかの確認を毎回毎回行うことは効率が悪いためです。

##●Minitestの基本
まずは、テスト用のフレームワークを用意します。
Rubyにおいてはそのフレームワークの一つとしてMinitestがあります。

Minitestを使うメリットは、
・Rubyと一緒にインストールされるため、セットアップが不要
・学習コストの低さ
・Railsのデフォルトのテスティングフレームワークのため、Railsを開発するときにも知識を生かしやすい。

今回のテストを行うにおいての簡単な手順としては、
1. Rubyプログラム(テストコード)を書く
2. テストコードの実行
3. テスティングフレームワークが結果をチェックして、結果報告

では、実際にテストコードを書いていってみましょう。

test_ruby.rb
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ならテストをパスしたことになります。
今回はテストにパスした例になりますが、次は失敗例をみてみましょう。

###●テストの実行結果、失敗例

test_ruby.rb
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』へと変わりました。

  1. Error:以降はエラー内容の詳細になります。

1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
から、1件のエラーで終わったことが確認できました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0