Gibt es eine weniger aufdringliche Alternative zu Rspecs `should_receive`?
Beim Schreiben von Rspec-Tests bin ich oft frustriertshould_receive
. Ich würde gerne wissen, ob es eine weniger aufdringliche Alternative gibt.
Zum Beispiel:
describe "making a cake" do
it "should use some other methods" do
@baker.should_receive(:make_batter)
@baker.make_cake
end
end
Der Anruf nachshould_receive
ist eine gute beschreibung, aber sie bricht meinen code, weilshould_receive
funktioniert durch Maskieren der ursprünglichen Methode, undmake_cake
Ich kann nicht weitermachen, es sei dennmake_batter
gibt tatsächlich etwas Teig zurück. Also ändere ich es so:
@baker.should_receive(:make_batter).and_return(@batter)
Das ist hässlich, weil:
Essieht aus als würde ich das testenmake_batter
richtig kehrt zurück@batter
, aber ich bintatsächlich Erzwingen der gefälschten Version vonmake_batter
um das zurückzugeben.Es zwingt mich, mich separat einzurichten@batter
Obmake_batter
hat alle wichtigen Nebenwirkungen (die ein Code-Geruch sein könnten, nehme ich an), die ich auch passieren lassen muss.ich wünsche mir, dassshould_receive(:make_batter)
würde den Methodenaufruf und verifizierenleiten Sie es an die ursprüngliche Methode weiter. Wenn ich sein Verhalten für bessere Isolationstests unterbinden wollte, würde ich dies explizit tun:@baker.stub(:make_batter).and_return(@batter)
.
Gibt es eine Möglichkeit, so etwas zu tun?should_receive
ohne den ursprünglichen Methodenaufruf zu verhindern? Ist mein Problem ein Symptom für schlechtes Design?