Um es klar, ich FakeItEasy geschaffen, so werde ich nicht definitiv sagen, ob ein Rahmen als die anderen besser ist, was ich tun kann, ist, einige Unterschiede hinweisen und motiviert warum Ich habe FakeItEasy erstellt. Funktionell gibt es keine wesentlichen Unterschiede zwischen Moq und FakeItEasy.
FakeItEasy hat keine "Verifizierbar" oder "Erwartungen" es hat Behauptungen, aber diese werden immer am Ende eines Tests explizit angegeben, ich glaube, das macht Tests leichter zu lesen und zu verstehen. Es hilft auch Anfängern, mehrere Behauptungen zu vermeiden (wo sie Erwartungen auf viele Aufrufe oder Mock-Objekte setzen würden).
Ich habe Rhino Mocks vorher benutzt und es hat mir sehr gut gefallen, besonders nachdem die AAA-Syntax eingeführt wurde. Ich mochte die flüssige API von Moq aber besser. Was mir mit Moq nicht gefallen hat war das "Mock-Objekt" wo man mock.Object überall verwenden muss, mir gefällt der Rhino-Ansatz mit "natürlichen" Mocks besser. Jede Instanz sieht und fühlt sich an wie eine normale Instanz des gefälschten Typs. Ich wollte das Beste aus beiden Welten und wollte auch sehen, was ich mit der Syntax machen konnte, wenn ich absolut freie Hände hatte. Persönlich denke ich (offensichtlich), dass ich etwas geschaffen habe, das eine gute Mischung mit dem Besten aus beiden Welten ist, aber das ist ziemlich einfach, wenn man auf den Schultern von Riesen steht.
Wie hier erwähnt wurde einer der wichtigsten Unterschiede in der Terminologie, FakeItEasy erste TDD einzuführen geschaffen wurde, und für Anfänger spöttisch und über die Unterschiede zwischen Mocks und Stubs zu kümmern vorne (die Art und Weise Sie haben würde in Rhino) ist meiner Meinung nach nicht sehr nützlich.
Ich habe eine Menge Fokus in die Ausnahmemeldungen gelegt, es sollte sehr einfach sein zu sagen, was falsch in einem Test nur eine Ausnahmebedingungsnachricht ist.
FakeItEasy hat einige Erweiterbarkeitsfunktionen, die die anderen Frameworks nicht haben, aber diese sind noch nicht sehr gut dokumentiert.
FakeItEasy ist (hoffentlich) ein wenig stärker in Mocking-Klassen, die Konstruktorargumente haben, da es einen Mechanismus zum Auflösen von Dummy-Werten zu verwenden gibt. Sie können sogar Ihre eigenen Dummy-Wertdefinitionen angeben, indem Sie eine DummyDefinition (Of T) -Klasse in Ihrem Testprojekt implementieren, die automatisch von FakeItEasy übernommen wird.
Die Syntax ist ein offensichtlicher Unterschied, welcher besser ist, ist weitgehend eine Frage des Geschmacks.
Ich bin mir sicher, dass es viele andere Unterschiede gibt, die ich jetzt vergesse (und um ehrlich zu sein, habe ich Moq nie selbst in der Produktion verwendet, so dass mein Wissen begrenzt ist), ich denke, dies sind die wichtigsten Unterschiede obwohl.
Für eine ganz andere Art von spöttischen und Stubs auf der Microsoft Mole Rahmen (http: // research.microsoft.com/en-us/projects/moles/). Moles erlaubt es, statische, versiegelte und Third-Party-Klassen zu verspotten. – softveda