0
1

[ruby初心者向け] rubyの単体テストってどうすればいいの? test-unit編

Last updated at Posted at 2024-06-03

単体テストはどうすればいいの?

プログラミングを始めたてだと、書いたコードのテストが苦手だと感じる人が多いと思います。
1つ1つ確認するのは面倒くさいし、そもそもどうすればいいのか分からない人もいるはず...
そこでrubyの単体テストのやり方をまとめました!

結論

簡単に手早くするならtest-unitを使おう!!

test-unitとは?

Rubyインストール時に一緒にインストールされる単体テスト用フレームワークです。
単体テスト用フレームワークを使うことでテストを自動化し、無駄な労力を減らすことができます。

単体テスト例

test-unitで簡単なテスト

テストコード

ruby is_odd_test.rb
require 'test/unit'

#テストしたいメソッド
def is_odd?(n) 
    n % 2 == 1
end

#テスト用のクラス
class OddTest < Test::Unit::TestCase
  #テストメソッド
  def test_is_odd
    #検証メソッド
    # assert_equal b, a => aとbが等しければパスする 
    assert_equal true, is_odd(1)
    assert_equal false, is_odd(2)
    # assert a => aが真であればパスする 
    assert is_odd(3)
    # refute a => aが偽であればパスする 
    refute is_odd(4)
  end
end

テスト実行

ターミナルで実行

ruby is_odd_test.rb

実行結果

Loaded suite is_odd_test
Started
.
Finished in 0.000150 seconds.
------------------------------------------------------------------------------------------------------
1 tests, 4 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
------------------------------------------------------------------------------------------------------
6102.72 tests/s, 30500.61 assertions/s

解説

  • 3行目: 実行したテストメソッドの数だけピリオドが表示される
  • 4行目: テスト終了までにかかった時間
  • 6行目: テスト結果
    • tests: 実行したテストメソッドの件数
    • assertions: 実行した検証メソッドの件数
    • failures: 検証に失敗したテストメソッドの件数
    • errors: 検証中にエラーが発生したテストメソッドの件数
  • 7行目: 検証に成功してパスされた割合

test-unitでデータ駆動テストをやってみよう!

ruby upcase_test.rb
require 'test/unit'

class OddTest < Test::Unit::TestCase
  def test_upcase_1
    assert_equal 'BLUE', 'blue'.upcase
  end
  
  def test_upcase_2
    assert_equal 'GREEN', 'green'.upcase
  end

  def test_upcase_3
    assert_equal 'RED', 'red'.upcase
  end

  def test_upcase_4
    assert_equal 'YELLOW', 'yellow'.upcase
  end
end

上記のようなテストする場合、

ruby upcase_test.rb
require 'test/unit'

class OddTest < Test::Unit::TestCase
  data \
    :blue => ['BLUE', 'blue'],
    :green => ['GREEN', 'green'],
    :red => ['RED', 'red'],
    :yellow => ['YELLOW', 'yellow']

  def test_upcase(data)
    expected, target = data
    assert_equal expected, target.upcase
  end
end

という感じでシンプルにまとめることができる!

記述するコード量も減って単体テストが楽になること間違いなし!!

まとめ

いかがでしょうか?
これで、test-unitを使った単体テストを楽々こなせるはずです。
忘れたとしてもこの記事を見れば大丈夫!
少しでもあなたの役に立てたのなら幸いです。
良いプログラミング生活を!!!

参考文献

プロを目指す人のためのRuby入門[改訂2版]
test-unit Ruby用単体テストフレームワーク
Qiita test-unit vs. minitest

0
1
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
0
1