単体テストはどうすればいいの?
プログラミングを始めたてだと、書いたコードのテストが苦手だと感じる人が多いと思います。
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