2016-08-24 2 views
1

Ich radiere oft, dass man Mocks vermeiden und Stubs bevorzugen sollte.Warum sollte ich Stubs über Mocks bevorzugen?

Die Isolation Frameworks wie FakeItEasy und NSubstitute machen es die meiste Zeit wirklich einfach, eine Abhängigkeit zu verspotten oder zu stubben. Diese Frameworks selbst unterscheiden nicht zwischen Stubs oder Mocks, sondern nennen sie insgesamt Fakes oder Substitutes. So weit ich in den frühen Tagen von "Mocking" weiß, war es sehr schwierig, Mock-Objekte zu erstellen, weil ich den umständlichen Record and Replay-Mechanismus nutze. Aber heute scheint es keinen großen Unterschied mehr zu geben.

Also warum sollte ich Stubs über Mocks bevorzugen? Warum sind Mocks brüchiger als Stubs?

Antwort

3

Sie sollten keine Stubs über Mocks "bevorzugen"; Vielmehr sollten Sie das richtige Werkzeug für den Job wählen:

Mocks for Commands, Stubs for Queries

+0

Vielen Dank für Ihre Antwort. Vielleicht hätte ich eine andere Frage stellen sollen. Warum verursachen Mocks mehr Schaden als Stubs oder warum sind Mocks spröder als Stubs? – Rookian

+0

Ich würde eine bessere Antwort von jemandem mit 100K + rep erwarten. Zum Beispiel könnten Sie die Konzepte eines "Stub" und eines "Mocks" in Ihren eigenen Worten definieren (Link-Antworten, wie Sie wissen, werden nicht empfohlen).Das größte Problem bei dieser Antwort ist jedoch, dass es auf einer fehlerhaften "Schein" -Definition aus einem "alten" (2007) Buch basiert, was im Widerspruch zu dem steht, was die tatsächlichen spöttischen Bibliotheken bieten. Dh es besteht eine Diskrepanz zwischen Theorie und Praxis. –

+0

@Rookian Ich denke, die Prämisse für die Frage ist ein bisschen fehlerhaft. Wie Gerard Meszaros in seinem alten (scheinbar nutzlosen) Buch erklärt, erzeugen Befehle * indirekte Ausgabe * anstelle der * direkten Ausgabe *, die durch Abfragen erzeugt wird. Sie können die indirekte Ausgabe oft in eine direkte Ausgabe umwandeln und umgekehrt, so dass sie tatsächlich äquivalent sind. Wenn ich spekulieren muss, Leute mögen Mocks nicht, weil sie dazu neigen, die Mocks zu sehr miteinander interagieren zu lassen, aber das ist eher ein Problem im Zusammenhang mit "zu viel" auf einmal, als ein Problem mit Mocks selbst ... –

-1

Zumindest mit den neuesten Spott-Tools gibt es keinen Grund, sich mit Stubs gegen Mocks zu beschäftigen. In der Praxis sind Mock und Stubs identisch, wenn sie von einer höhnischen Bibliothek erstellt werden. Und so sollte es sein.

Mit den Mocking-Bibliotheken für Java (und auch für C# .NET, wenn ich mich nicht irre), können Sie nicht "nur" einen Stub erstellen. Sie immer erhalten Sie ein Mock-Objekt, auf dem die Erwartungen verifiziert werden können.

+0

„Sie haben immer ein Mock-Objekt erhalten, auf den Erwartungen überprüft werden können“ nicht wahr? Sie werden keine Überprüfungen auf Stubs vornehmen. Es gibt immer noch einen Unterschied zwischen beiden. – Rookian

+0

@Rookian Kannst du auf irgendeine spöttische Bibliothek verweisen, mit der du nur einen Stub erstellen kannst, auf dem die Erwartungen nicht verifiziert werden können? Mir ist keine solche Bibliothek bekannt. –

+1

Solche Bibliotheken erstellen keinen Stub oder Mock, sondern ein falsches Objekt, das als Stub oder/und Mock verwendet werden kann. – Rookian

Verwandte Themen