Existe uma alternativa menos intrusiva ao `should_receive` da Rspec?

Ao escrever testes Rspec, muitas vezes sou frustrado comshould_receive. Eu gostaria de saber se há uma alternativa menos intrusiva.

Por exemplo:

describe "making a cake" do
  it "should use some other methods" do
    @baker.should_receive(:make_batter)
    @baker.make_cake
  end
end

A chamada parashould_receive é uma boa descrição, mas quebra meu código, porqueshould_receive funciona mascarando o método original emake_cake não pode continuar a menosmake_batter na verdade retorna um pouco de massa. Então eu mudo para isso:

@baker.should_receive(:make_batter).and_return(@batter)

Isso é feio porque:

istoparece como se eu estivesse testando issomake_batter retorna corretamente@batter, Mas euna realidade forçando a versão falsa demake_batter para retornar isso.Isso me força a configurar separadamente@batterE semake_batter tem quaisquer efeitos colaterais importantes (o que poderia ser um cheiro de código, suponho) eu tenho que fazer com que isso aconteça também.

eu desejo queshould_receive(:make_batter) iria verificar a chamada do método epassá-lo para o método original. Se eu quisesse stub seu comportamento para melhor teste de isolamento, eu faria isso explicitamente:@baker.stub(:make_batter).and_return(@batter).

Existe uma maneira de fazer algo comoshould_receive sem impedir a chamada do método original? O meu problema é um sintoma de design ruim?

questionAnswers(3)

yourAnswerToTheQuestion