0

很多时候,一个结果可能有两种不同的结果,需要用测试替身进行测试。例如,如果网络连接成功,我想记录一条消息,并将资源传递给另一个将在内部存储它的对象。另一方面,将这两个放在一个测试中感觉不干净。例如此代码失败:

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       

我可以在每个测试中指定另一个测试中的函数可能会被调用,但这看起来像是不必要的重复。在那种情况下,我宁愿做这个测试。

我也不喜欢在测试中从来没有明确不应该调用方法。

有谁知道有一个明确的“should_not_receive”消息而不是自动拒绝未明确指定的呼叫的替代方案?

4

1 回答 1

0

RSpec 支持should_not_receive,这等同于RSpec 原作者在此消息should_receive(...).exactly(0).times中所讨论的内容。

于 2013-10-06T20:42:07.557 回答