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


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

[code]

    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
    
[/code]

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

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

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

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




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

例えば[Class.new](http://docs.ruby-
lang.org/ja/2.1.0/class/Class.html#S_NEW)を使うと以下のように書けます:

[code]

    Class.new { include Foo }.new.bar(1)
    
[/code]




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

例えば[Class.new](http://docs.ruby-
lang.org/ja/2.1.0/class/Class.html#S_NEW)を使うと以下のように書けます:

[code]

    Class.new { include Foo }.new.bar(1)
    
[/code]

