0

多くの場合、1 つの結果が 2 つの異なる結果になり、テスト ダブルでテストする必要があります。たとえば、ネットワーク接続が成功した場合、メッセージをログに記録し、リソースを別のオブジェクトに渡して内部に保存したいと考えています。一方で、これら2つを1つのテストに入れるのは不潔に感じます。たとえば、次のコードは失敗します。

describe SomeClass do
  let(:logger) { double('Logger') }
  let(:registry) { double('Registry') }
  let(:cut) { SomeClass.new }
  let(:player) { Player.new }

  describe "#connect" do
    context "connection is successful" do
      it "should log info" do
        logger.should_receive(:info).with('Player connected successfully')
        cut.connect player
      end

      it "should register player" do
        registry.should_receive(:register).with(player)
        cut.connect player
      end   
    end
  end
end       

各テストで、他のテストの関数が呼び出される可能性があることを指定できますが、それは不必要な重複のように見えます。その場合、私はむしろこれを1つのテストにしたいと思います。

また、メソッドを呼び出してはならないことがテストで明示されていないことも好きではありません。

明示的に指定されていない呼び出しを自動的に拒否する代わりに、明示的な「should_not_receive」メッセージを持つ代替案について知っている人はいますか?

4

1 に答える 1

0

RSpec は をサポートしています。これは、RSpec の元の作成者からのこのメッセージで説明されてshould_not_receiveいるものと同等です。should_receive(...).exactly(0).times

于 2013-10-06T20:42:07.557 に答える