3.3 FizzBuzzプログラムのテスト自動化

テストフレームワークのminitestを使用する。
Rubyと一緒にインストールされている。

  • クラス名は慣習としてTestで終わるまたは始まる名前をつける。
  • メソッド名は test_ で始めることが必須。minitestでは test_ ではじまるメソッドを全て実行していく。
  • 検証は、assert_equal 期待値, テスト対象の値や式
  • テスト対象のクラスはrequireで指定する必要がある。Rubyを実行するディレクトリからの相対パスを指定する。

テスト対象

def fizz_buzz(n)
  if n % 15 == 0
    'Fizz Buzz'
  elsif n % 3 == 0
    'Fizz'
  elsif n % 5 == 0
    'Buzz'
  else
    n.to_s
  end
end

テストコード

require 'minitest/autorun'
require './lib/fizz_buzz'

class FizzBuzzTest < Minitest::Test
  def test_fizz_buzz
    assert_equal '1', fizz_buzz(1)
    assert_equal '2', fizz_buzz(2)
    assert_equal 'Fizz', fizz_buzz(3)
    assert_equal '4', fizz_buzz(4)
    assert_equal 'Buzz', fizz_buzz(5)
    assert_equal 'Fizz', fizz_buzz(6)
    assert_equal 'Fizz Buzz', fizz_buzz(15)
  end
end

実行結果

  • ドットは実行したテストメソッドの数らしい。今回は1つ。
  • Finished in 0.001320s,   テスト実行時間。
  • 757.5756 runs/s,     1秒間に実行できるであろうテストメソッド数。
  • 5303.0292 assertions/s. 1秒間に実行できるであろう検証メソッド数。
$ ruby test/fizz_buzz_test.rb 
Run options: --seed 18101

# Running:

.

Finished in 0.001320s, 757.5756 runs/s, 5303.0292 assertions/s.

1 runs, 7 assertions, 0 failures, 0 errors, 0 skips

参考文献

「プロを目指す人のためのRuby入門」