Rubyでユニットテストをする方法

やり方

require 'minitest/autorun'して、Minitest::Testを継承したクラスを作れば良い。一例として、スマートフォンの料金を計算するクラスを考えてみた。

class Smartphone
  # attr_accessor :price, :tax, :service

  def initialize(price, tax, service)
    @price = price
    @tax = tax
    @service = service
  end

  def calc
    f = @price * @tax + @service
    return f.to_int
  end
end

require 'minitest/autorun'

class SmartphoneMinitestTest < Minitest::Test
  def smart(price)
    return Smartphone.new(price, 1.1, 3).calc
  end

  def test_sample
    linemo_best_plan_main = smart(900 + 500)
    linemo_best_plan_sub = smart(900)

    assert_equal linemo_best_plan_main + linemo_best_plan_sub, 2536
  end
end

実行するとこんな感じになる

ruby "main.rb"
Run options: --seed 2997
# Running:
.
Finished in 0.002367s, 422.4222 runs/s, 422.4222 assertions/s.
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips

自分のスマホ料金

LINEMOのベストプランが1回線目で900円 + 5分通話定額の500円、それを消費税とユニバーサルサービス料金3円をプラスした金額を計算する。2回線目は5分通話定額をつけていないので900円と消費税とユニバーサルサービス料金3円をプラスして、合計をアサーションする。結果2536円で正しくなる。

オート実行したくない場合

require 'minitest'して、Minitest.autorunを実行すれば同じ挙動となる。

require 'minitest'

class MainMinitestTest < Minitest::Test
  def test_sample
    assert_equal 1, 1
  end
end

def main
  Minitest.autorun
end

main if __FILE__ == $PROGRAM_NAME