4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ruby Minitestを試す

Last updated at Posted at 2020-06-25

目的

Railsのデフォルトのテスティングフレームについてアウトプットする。

テストコードのひな形

Minitestを使ったテストコードのひな形は下記の通り。

sample_test.rb
require 'minitest/autorun'

class SampleTest < Minitest::Test
  def test_sample
    assert_equal 5, 'こんにちは'.length
  end
end

・1行目でMinitestに必要なライブラリを呼び出す。
・SampleTestクラスにMinitest::Testクラスを継承させる。
・SampleTestクラス内に、実行対象となるテストメソッドを定義する(test_sample)
という流れで作成できる。

assert_equalは検証メソッドで、第1引数には予想される値、第2引数は検証する値を入れる。
したがって、test_sampleメソッドは、「'こんにちは'という文字列の文字数」が「5文字」であるかをテストしている。
結果として等しくなるので、テストはパスする。
test.png
・runs: 実行したテストメソッドの件数(test_sampleのみなので1件)
・assertions: 実行した検証メソッドの件数(assert_equalを1回使用)
・failures: 検証に失敗したテストメソッドの件数
・errors: 検証中にエラーが出たテストメソッドの件数
・skips: skipメソッドにより実行をスキップされたテストメソッドの件数
を表している。

検証メソッドの例

http://docs.seattlerb.org/minitest/Minitest/Assertions.html
MinitestのAPIドキュメントを参考にいくつか検証メソッドを使ってみる。

hello_test.rb
require 'minitest/autorun'

def hello(name)
  puts "#{name}さん、こんにちは!"
end

class HelloTest < Minitest::Test
  def test_hello
    assert_output("Bobさん、こんにちは!\n") { hello("Bob") }
  end
end

assert_outputを使うと、標準出力した内容をテストできる。

multiple_of_eleven_test.rb
require 'minitest/autorun'

def multiple_of_eleven?(number)
  number % 11 == 0
end

class MultipleOfElevenTest < Minitest::Test
  def test_true
    assert multiple_of_eleven? 121
  end
  def test_false
    refute multiple_of_eleven? 13
  end
end

assert,refuteメソッドを使うと、真偽をテストできる。

後書き

Minitestを使うと簡単にテストを実装できるので、活用してみる。
今度はRspecについてもアウトプットしたい。

参考文献

プロを目指す人のためのRuby入門
伊藤 淳一[著]

4
3
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
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?