ようへいの日々精進XP

よかろうもん

2018 年 02 月 09 日(金)

ジョギング

  • 昼休みを利用して香椎浜 2 周
  • かなりキツかったし、腰もイマイチ

日課

  • 腕立てを始めた段階で腰に痛みが出たので止めた

今夜も

  • しょうがチューブとにんにくチューブ間違ってしまい、大量のおろしにんにく鍋になってしまった

今日のるびぃ ~ メソッドの公開レベルについて (4) + minitest ~

引き続き, プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで の読書メモ.

サンプルコード

昨日の体重比較コード.

class User
  attr_reader :name
  def initialize(name, weight)
    @name = name
    @weight = weight
  end

  def heavier_than?(other_user)
    other_user.weight < @weight
  end

  protected
  def weight
    @weight
  end
end

以下のようにインスタンス化して使う.

foo = User.new('Foo', 50)
bar = User.new('Bar', 60)

p foo.heavier_than?(bar) #=> false
p bar.heavier_than?(foo) #=> true

このコードのテストを書いた.

テストコード

require 'minitest/autorun'
require './weight'

class WeightTest < Minitest::Test

  def setup
    @foo = User.new('Foo', 50)
    @bar = User.new('Bar', 60)
  end

  def test_foo_heavier_than_bar?
    assert_equal @foo.heavier_than?(@bar), false
  end

  def test_bar_heavier_than_foo?
    assert_equal @bar.heavier_than?(@foo), true
  end

  def test_foo_weight
    assert_equal @foo.send(:weight), 50
  end

  def test_bar_weight
    assert_equal @bar.send(:weight), 60
  end
end

protected メソッドは send(:メソッド名) でイケた.

$ ruby weight_test.rb 
Run options: --seed 18794

# Running:

....

Finished in 0.001874s, 2135.0300 runs/s, 2135.0300 assertions/s.

4 runs, 4 assertions, 0 failures, 0 errors, 0 skips

いい感じ.