5

私はこのような方法を持っています

class SomeClass
  def self.test_method
    while(true)
      make_heavy_lifting
      sleep(60*60)
    end
  end
end

このメソッドのテストを作成するにはどうすればよいですか。

私が考えた解決策の 1 つは、sleep メソッドをスタブ化することであり、それは機能しましたが、while キーワードをスタブ化できません。無限ループを持つメソッドの単体テストのベスト プラクティスを提案してください。

4

2 に答える 2

6

たぶん、sleep 以外の while 内のすべてを別のメソッドに移動してから、そのメソッドの仕様のみを記述します。メソッドに while ループとスリープがあることを本当にテストする必要はないと思います (必要はありません)。コードのすべての行をテストするには:P)しかし、それを行いたい場合は、この質問を確認してください。「無限ループ」をテストする場合のベストプラクティスは何ですか?

于 2012-11-13T18:01:26.897 に答える
5

これをテストするために、次:loopの代わりにそれをスタブして使用しますwhile(true)

クラス:

class SomeClass
  def self.test_method
    loop do
      make_heavy_lifting
      sleep(60*60)
    end
  end
end

仕様:

describe SomeClass do
  describe '#test_method' do
    expect(SomeClass).to receive(:loop).and_yield
    expect(SomeClass).to receive(:make_heavy_lifting)
    expect(SomeClass).to receive(:sleep).with(60*60)
end

このようにして、一度だけ反復します。

編集:これは他の質問でも提案されたようです

于 2016-01-08T04:52:57.050 に答える