Rubyでインスタンスメソッドとして利用するためのModuleのメソッドを簡単にテストする方法

投稿者: Anonymous

例えば、以下のようなコードがあったとします。

module Foo
  def bar(i)
    i + 1
  end
end

class Bar
  attr_accessor :some_value
  include Foo
  def initialize(any_value)
    @some_value = bar(any_value)
  end
end

このとき、Fooは広範囲で使われるため、Barとしてのテストではなく、Foo自体のメソッドとしてテストしたいとします。このとき、考えうる方法は二つあるかと思われます。

まず一つにはObject.new.extend(Foo)で、Objectのインスタンスに対して、後付けする方法。

もう一つはインスタンスメソッドにすることを諦めて、self.barとして定義しなおす方法。

しかし、上記二つは、どちらも余り綺麗とは言えないような気がします。上記以外で、Moduleで定義され、インスタンスメソッドとして利用されることを期待されるメソッドをテストするための、もっとスマートな方法があれば教えて下さい。

解決

Fooモジュールをincludeしたクラスを作成し、そのクラスのインスタンスに対してテストするとよいのではないでしょうか。

例えばClass.newを使うと以下のように書けます:

Class.new { include Foo }.new.bar(1)
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *