0

およびメソッドを実装するモデルに距離関連のメソッドを提供するModuleという名前があります。Coordinatedlatitudelongitude

module Coordinated
  ...
  def crow_flies_to(place)
    raise ArgumentError, "place does not implement latitude and longitude" unless is_coordinated?(place)
    Math.sqrt((latitude - place.latitude).abs**2 + (longitude - place.longitude).abs**2)
  end

  def is_coordinated?(place)
    place.respond_to?(:latitude) && place.respond_to?(:longitude)
  end
  ...
end

Coordinatedクラスがロードされたときに必要なメソッドを実装するクラスが含まれていることをテストしたいと思います。それ、どうやったら出来るの?

4

1 に答える 1

1

includedモジュールが含まれているときに実行されるフックを使用できます。

module M
  def self.included(klass)
    raise "Must implement 'foo'" unless klass.instance_methods.include?(:foo)
  end
end

class C; include M; end
#=> RuntimeError

class C
  def foo; end
  include M
end
#=> C

これには、フックの実行時にメソッドが既に存在している必要があるため、メソッドが定義されたに含める必要があるという欠点があります。

于 2012-08-25T15:09:53.987 に答える