ようへいの日々精進XP

よかろうもん

2018 年 02 月 10 日(土)

ジョギング

  • 朝から雨というのと、腰痛がジワリとあるのでお休み

日課

  • お休み

佐世保のゆーちゃん

佐世保に住んでいる奥さんのおじさん宅に訪問。テーブル一杯に並べられた手料理と尽きない話で楽しい時間を過ごした。四王寺坂の正三おじさんと、佐世保のゆーちゃん、りょーちゃんにはいつも気にかけてもらって、優しくして頂いて本当に感謝している。色々とあるけど、こんな親戚付き合いが続くといいなあ。

今日のるびぃ ~ minitest ~

オブジェクトにメソッドが存在する minitest のメソッド MiniTest::Assertions#assert_respond_to を試す.

class Sample
  def foo
    'foo' 
  end

  def bar
    'bar' 
  end
  
  private :bar
end

以下のようにテストを書く.

require 'minitest/autorun'
require './sample'

class SampleTest < Minitest::Test
  setup do
    @baz = Sample.new
  end

  def test_call_foo_method
    assert_respond_to(@baz, :foo) 
  end
  
  def test_call_bar_method
    assert_respond_to(@baz, :bar) 
  end
end

実行してみる.

$ ruby sample1_test.rb 
Run options: --seed 53217

# Running:

F.

Finished in 0.000958s, 2087.3340 runs/s, 2087.3340 assertions/s.

  1) Failure:
SampleTest#test_call_bar_method [sample1_test.rb:14]:
Expected #<Sample:0x000055ea281955d8> (Sample) to respond to #bar.

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

bar メソッそは private メソッドで, private メソッドはオブジェクトをレシーバとして呼べないことを確認.

Object#respond_to? では, 第二引数に true を指定することで, private メソッドも true) となるのに, assert_respond_to に同等のオプションがなぜないのかちょっと疑問が残る.

baz = Sample.new
p baz.respond_to?(:foo) #=> true
p baz.respond_to?(:bar) #=> false
p baz.respond_to?(:bar, true) #=>true

ふむふむ.