久しぶりにRubyを書いた。
minitestによるテストの書き方
完全に備忘録。minitestのGitHubページを見れば全て書いてあるんだけれども。
バージョン
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin18]
テンプレ
minitestを使ったテストは以下のように書いておく。
# hoge_test.rbとして保存 require "minitest/autorun" # テスト対象のスクリプトを読み込ませる require_relative "hoge" class TestHoge < Minitest::Test # 初期化処理 def setup @hoge = Hoge.new end # テストメソッド名の先頭にはtest_をつける def test_aaa assert_equal "123", @hoge.aaa end end
assertionのメソッド(assert_equal
とか)は以下のページに記されているものを使う。
テスト対象のスクリプト
テスト対象のスクリプトは以下のような感じで。
# hoge.rbとして保存 class Hoge def aaa "123" end end # requireで読み込まれたときにはここのifはfalseになる if $0 == __FILE__ h = Hoge.new p h.aaa end
if $0 == __FILE__
はRubyでよく使われるイディオム。require
で読み込まれたときにはfalse
、スクリプトとして直接使われたときにはtrue
が返ります。上記の例では、テストのときには
h = Hoge.new
p h.aaa
は実行されませんが、ruby hoge.rb
のように実行すると
h = Hoge.new
p h.aaa
は実行されます。
実行結果
テストの実行結果。p h.aaa
が実行されていないことにも注目です。
$ ruby hoge_test.rb Run options: --seed 12685 # Running: . Finished in 0.000671s, 1490.3130 runs/s, 1490.3130 assertions/s. 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips $
ちなみにスクリプト単体の実行結果は以下の通りになります。
$ ruby hoge.rb "123" $