Frage

Ich bin zufällig auf dieses Open-Source-Projekt gestoßen Fake It Easy, und ich muss zugeben, es sieht sehr interessant aus, aber ich habe meine Zweifel, was ist der Unterschied zwischen FIE-Fälschungen und sagen wir Moq-Mocks?Ist irgendjemand für bestimmte Zwecke besser geeignet?

BEARBEITEN:

Was macht dieses neue Framework besser als beispielsweise Moq?

War es hilfreich?

Lösung

Um es klarzustellen: Ich habe FakeItEasy erstellt, daher werde ich definitiv nicht sagen, ob ein Framework besser ist als das andere. Ich kann nur auf einige Unterschiede hinweisen und motivieren Warum Ich habe FakeItEasy erstellt.Funktionell gibt es keine großen Unterschiede zwischen Moq und FakeItEasy.

FakeItEasy hat keine „Überprüfbaren“ oder „Erwartungen“, sondern Behauptungen. Diese werden jedoch immer explizit am Ende eines Tests angegeben. Ich glaube, dass Tests dadurch leichter zu lesen und zu verstehen sind.Es hilft Anfängern auch dabei, mehrere Asserts zu vermeiden (bei denen sie Erwartungen an viele Aufrufe oder Scheinobjekte setzen würden).

Ich habe vorher Rhino Mocks verwendet und es hat mir sehr gut gefallen, besonders nachdem die AAA-Syntax eingeführt wurde, gefiel mir jedoch die fließende API von Moq besser.Was mir bei Moq nicht gefallen hat, war das „Mock-Objekt“, bei dem man überall „mock.Object“ verwenden muss. Mir gefällt der Rhino-Ansatz mit „natürlichen“ Mocks besser.Jede Instanz sieht aus und fühlt sich an wie eine normale Instanz des gefälschten Typs.Ich wollte das Beste aus beiden Welten und außerdem wollte ich sehen, was ich mit der Syntax machen konnte, wenn ich völlig freie Hände hatte.Persönlich denke ich (natürlich), dass ich etwas geschaffen habe, das eine gute Mischung aus dem Besten aus beiden Welten ist, aber das ist ziemlich einfach, wenn man auf den Schultern von Giganten steht.

Wie hier erwähnt, liegt einer der Hauptunterschiede in der Terminologie. FakeItEasy wurde ursprünglich entwickelt, um Anfängern TDD und Mocking näher zu bringen, und man musste sich im Vorfeld um die Unterschiede zwischen Mocks und Stubs kümmern (wie man es in Rhino tun müsste). meiner Meinung nach nicht sehr nützlich.

Ich habe großen Wert auf die Ausnahmemeldungen gelegt. Es sollte sehr einfach sein, anhand einer Ausnahmemeldung zu erkennen, was in einem Test falsch war.

FakeItEasy verfügt über einige Erweiterbarkeitsfunktionen, die die anderen Frameworks nicht haben, aber diese sind noch nicht sehr gut dokumentiert.

FakeItEasy ist (hoffentlich) etwas stärker bei der Verspottung von Klassen mit Konstruktorargumenten, da es über einen Mechanismus zum Auflösen der zu verwendenden Dummy-Werte verfügt.Sie können sogar Ihre eigenen Dummy-Wertdefinitionen angeben, indem Sie in Ihrem Testprojekt eine DummyDefinition(Of T)-Klasse implementieren. Diese wird automatisch von FakeItEasy übernommen.

Die Syntax ist ein offensichtlicher Unterschied, welche besser ist, ist weitgehend Geschmackssache.

Ich bin mir sicher, dass es noch viele andere Unterschiede gibt, die ich jetzt vergesse (und um fair zu sein, ich habe Moq selbst noch nie in der Produktion verwendet, daher ist mein Wissen darüber begrenzt). Ich denke jedoch, dass dies die wichtigsten Unterschiede sind.

Andere Tipps

Die Terminologie in Tests verwendet wird, kann etwas verwirrend sein. Die beste Quelle, den Unterschied zwischen den verschiedenen Konzepten zu erklären ist Mocks sind nicht Stubs von Martin Fowler. Zusammengefasst fälschen ist ein allgemeiner Begriff, der beide Stubs und Mocks beschreibt.

Die Terminologie in spöttischen verwirrend sein kann -. Und manchmal ist ganz unintuitive

Daher schlug viele Menschen eine einfachere, neue Terminologie, wo Sie nur noch Fakes , Mocks und Stubs .

Gefälschte ist der Oberbegriff für alle möglichen Arten von Test verdoppelt, egal woher sie kommen und wie sie verwendet werden.

Darüber hinaus, Fake ist entlang einer einzigen Dimension nur aus: ob sie Testergebnis beeinflussen oder nicht; oder, mit anderen Worten:., ob Sie haben Rückgabewerte für die Fälschung einzurichten, die irgendwie während der Testausführung verwendet werden, oder es ist ein ‚ silent ‘ Objekt, das nur dazu dient, eine gewisse Abhängigkeit zu erfüllen < br>

Stub ist es, dass ' silent ' Objekt.

Mock ist beteiligt sich aktiv in der Testdurchführung

Darüber hinaus gibt es keine weiteren Unterschied -., Die sicherlich seine historischen Verdienste hat, ist aber jetzt weitgehend kontraintuitiv und akademisch, und es ist eine Art wirklich wichtige Konzepte der Testgetriebene Entwicklung Verschleiern

In Bezug auf den Vergleich zwischen Moq und FakeItEasy : Die beiden Frameworks sind weitgehend gleichen die aus konzeptioneller Sicht - die Unterschiede sind nur in der API und in der Terminologie ...

Thomas

Aus meiner Sicht Gefälschte wird nicht das Moc zum Beispiel bricht verwende ich Dev Magie Fälschung zu fälschen DAL und Business-Schicht und in der gleichen Zeit, die ich verwende Mock in MVC für Httpcontext

var repoistory = new FakeRepository<ProductTypeForm, VendorForm>();
            repoistory.Save(productTypeForm);
            this.FillDropDown(new FakeRepository<VendorForm>());

Im vorherigen Code Dev Magie Gefälschte das ProductTypeForm und rufen Sie die VendorForm von Dev Magie Fälschung und verknüpfen es mit ProductTypeForm, diese speichern Betrieb sparen können dauerhaft sein

Für weitere Inforamtionen über Dev Magie Gefälschte sieht es auf CodePlex: http://devmagicfake.codeplex.com

Te Test dieser Methode, die wir zu Mock Haben Sie den HTTP-Kontext

var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();

Also habe ich die Arbeit mit gefälschten und Mock

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