Frage

In Roy Osherove Buch [Unit Testing] [1] Buch erklärt er, dass eine einzige Einheit Test zwischen 0 und 1 Mocks enthalten sollte. Er schlägt vor, dass, wenn Ihr Test ist nicht auf dem Mock behauptet, dann nicht ein Modell überhaupt. Er zeigt ferner, wie eine Isolations Framework verwendet Stubs zu erzeugen, die auf die Mocks in ähnlicher Weise erstellt wurden. Er legt keine vorgeschlagenen Begrenzung der Anzahl von Stubs pro Test erstellt.

Meine Frage ist: können diese Empfehlungen für alle Isolationsrahmen angewendet werden (oder alle gängigen C # Frameworks)? Mit anderen Worten, es ist ein Rahmen, der nur Mocks erzeugen kann - nicht Stubs? Gibt es eine Isolation Framework, das spottet von Stubs nicht unterscheiden?

Ich bin nur neugierig, wie einfach Osherove Empfehlungen lassen sich in Coding-Standards umgesetzt werden.

[1]: http: // die zu testende System nicht einmal wird überhaupt getestet, anstatt Daten von Mocks zurück ist das, was getestet wird.

War es hilfreich?

Lösung

Es gibt Frameworks wie Moq, die sie nicht unterscheiden. FakeItEasy geht sogar noch weiter und fordert alles gefälschte Objekte.

Ja, sie können angewandt werden, da spottet nur intelligente Stubs sind. Es spielt keine Rolle, dass viel, wenn Stummel solange mock aufgerufen werden, da Sie nicht assert auf mehr als einen Mock. Diese Empfehlung ist mit anderen Worten mehr über nur eine Sache pro Test zu behaupten. Explizit Mocks und Stubs zu unterscheiden ist nicht so wichtig.

Andere Tipps

Dies entspricht direkt an Osherove Empfehlung, dass Sie nur eine Assertion pro Test durchführen. In seinem Lexikon ist ein stub eine Klasse, die gefälschte Eingabe in dem zu testende System liefert, während ein mock eine Klasse, die Sie zu Testausgabe von dem getesteten System ermöglicht (unter Verwendung einer gefälschte Klasse).

Ob verwendet ein Rahmen eine ähnliche Namenskonvention zu seinen Designern, aber der Standard (wenn Sie mit seiner Empfehlung zustimmen) soll sein, dass nur eine Assertion pro Test durchgeführt wird, und wo die Behauptung erfordert ein gefälschtes Objekt -, dass nur ein gefälschtes Objekt sollte pro Test getestet werden.

Natürlich stimmt nicht jeder mit seiner Empfehlung, so dass nicht jeder tut es auf diese Weise.

Philip Calçado kürzlich darüber schrieb: http://fragmental.tw/2010/12/14/one-mock-per-test-considered-not-awesome/ . Kurz gesagt, er sagt, dass Sie in Ihrem Test Umleitungen auf, wie viele Mocks / Stubs gibt es konzentriert, was das Hauptanliegen sein soll: das Schreiben von guten Spezifikationen

.
> can those recommendations 
> [a single unit test should contain between 0 and 1 mocks] 
> be applied to all isolation frameworks ?

Ich denke: Die meiste Zeit Ja , wenn Sie diese Definitionen annehmen

  • Unittest = Test in Isolation (sonst ist es kein Unittest)
  • Ein Unittest für ein Merkmal
  • ein Stub oder gefälscht ist eine Aufgabe Isolation zu ermöglichen, aber das hat keine Verifikationsfunktion und
  • ein Modell ist ein Stummel mit zusätzlichen Funktionen, ermöglicht auch die Prüfung

ich verwende Moqfor mein Mocking Get es hier

Ich bin sicher nicht das, was Sie genau bedeuten über „Anstoßen“, aber ich nehme an, es ist wahrscheinlich so etwas wie Moles from Microsoft was ziemlich cool ist. Hier

Beide sind wirklich interessant und sehr einfach zu bedienen.

sollte Diese Art der Regel als „Training Wheels“ zu sehen. Offensichtlich ist ein Test, der viele Stubs und Mocks beinhaltet hat den Faden verloren, aber das Beharren auf einer Behauptung oder Erwartung pro Test ist einfach zu restriktiv. Wie der referenzierte Calçado Link weist darauf hin, was zählt, ist, dass es eine ist Konzept pro Test, der einige Behauptungen oder Erwartungen beinhalten könnte, um den Punkt zu machen. Das letzte, was Sie tun sollten, ist eine solche Norm erzwingen.

Eine weitere Sache, sollten wir wirklich sprechen über „Erwartungen“ hier, individuelle Interaktionen, anstatt ganze Mock-Objekte. In der Praxis sind sie oft die gleichen, aber es verwischt die Konzepte.

Ich benutze Rhino Mock für meinen Test in C #. Sie können mit ihm Mocks oder Stubs erzeugen. Ich Sie ermutigen, auf diesem Rahmen einen Blick haben: http://www.ayende.com/ Projekte / rhino-mocks.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top