很多时候,一个结果可能有两种不同的结果,需要用测试替身进行测试。例如,如果网络连接成功,我想记录一条消息,并将资源传递给另一个将在内部存储它的对象。另一方面,将这两个放在一个测试中感觉不干净。例如此代码失败:
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”消息而不是自动拒绝未明确指定的呼叫的替代方案?