2

Test::Unit でモジュールをテストしようとしたときに問題が発生しました。私がやっていたことはこれです:

my_module.rb:

class MyModule
  def my_func
    5 # return some value
  end
end

test_my_module.rb:

require 'test/unit'
require 'my_module'

class TestMyModule < Unit::Test::TestCase
  include MyModule

  def test_my_func
    assert_equal(5, my_func) # test the output value given the input params
  end
end

問題は、my_module が初期化メソッドを宣言すると、それがテスト クラスに含まれ、Test::Unit が初期化メソッドをオーバーライド/生成するように見えるため、多くの問題が発生することです。モジュールをテストする最良の方法は何ですか?

初期化メソッドは何かの状態を初期化するために作成されているため、この時点で私のモジュールがクラスになるべきかどうかも疑問に思っています。意見?

前もって感謝します !

4

2 に答える 2

4

モジュールにメソッドを含めるinitializeことは私にとって非常に間違っていると感じるので、少なくとも再考したいと思います。

ただし、これをモジュールとしてより直接的にテストすることについての質問に答えるには、新しい空のクラスを作成し、その中にモジュールを含め、そのクラスのインスタンスを作成してから、そのインスタンスに対してテストします。

class TestClass
  include MyModule
end

class TestMyModule < Unit::Test::TestCase
  def setup
    @instance = TestClass.new
  end

  def test_my_func
    assert_equal(5, @instance.my_func) # test the output value given the input params
  end
end
于 2009-11-18T21:16:52.977 に答える
3

ええ、あなたの初期化は、あなたがクラスに向かっていることを間違いなく示唆しているはずです。ruby のモジュールは、他の言語のインターフェースのように感じることがよくあります。モジュールを組み込むときにいくつかの基本的なことを実装している限り、無料で多くのことが得られます。

Enumerable は良い例です。[] を定義し、それぞれ Enumerable を含めると、突然 pop や push などが発生します。

したがって、モジュールのテストに関する私の直感は、モジュールが何にも含まれないように設計されていない限り、モジュール自体をテストするのではなく、おそらくモジュールを含むクラスをテストする必要があるということです。それは単にコードストレージメカニズムです。

于 2009-11-18T21:14:30.610 に答える