miyohideの日記

技術的なメモなどを記しています

2020年2月23日(日)

久しぶりに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とか)は以下のページに記されているものを使う。

docs.seattlerb.org

テスト対象のスクリプト

テスト対象のスクリプトは以下のような感じで。

# 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"
$