Im letzten Artikel dieser Serie “Einführung in Mocking Framework” haben wir vorgestellt, was Mocking Frameworks grundsätzlich sind, und gezeigt, unter welchen Aspekten diese Frameworks sich vergleichen lassen. Im Folgenden knüpfen wir daran an und stellen verschiedene Mocking Frameworks aus dem .NET Umfeld vor und vergleiche diese.
Es gibt viele Mocking Frameworks, und während Sie diesen Blogartikel lesen, werden wahrscheinlich gerade neue entwickelt. Um eine verwertbare Analyse zu erstellen, müssen wir Abgrenzungen schaffen. Unsere erste Abgrenzung ist: Wir wollen ein quelloffenes Framework und das kostenfrei bzw. ein Open Source Framework. Die Liste der Frameworks war auch nach diesem Kriterium sehr groß, weswegen wir entschieden haben: Wir folgend dem Trend!
Die Trend-Liste besteht nach unseren Recherchen aus folgenden Mocking Frameworks im .NET Bereich:
Aktivität
Werden die Open Source Projekte gewartet, bzw. beteiligt sich die Community noch an dem Projekt? Ansonsten müssen interne Entwickler Fehler im Framework beheben. Das erzeugt Kosten und verlangsamt die Lernkurve.
Release Cycle
In Open Source Projekten gibt es Stable Releases. In großen Softwareprojekten wollen wir uns ungern auf Software verlassen, die keine Qualitätssicherung durchlaufen hat.
Anwendbarkeit
Sie betrifft die Syntax, die Lernkurve und die Dokumentation. Die Dokumentation in Open Source Projekten kommt leider oft zu kurz. Das Problem an fehlender Dokumentation ist, dass in den Quellcode geschaut werden muss. Die Lernkurve steigt – und mit ihr auch die Kosten. Der Elan, mit dem die Entwickler mit dem Framework arbeiten, sinkt dadurch vermutlich auch. Das ist aus meiner Sicht ein nicht unerheblicher Punkt, denn glückliche Mitarrbeiter arbeiten lieber und besser.
Google Trend
Google Trend ist eine Analyse von Google, die die Suchfrequenz von Begriffen über die Zeit verfolgt. Wir analysieren mit Google Trend die Marktverbreitung bzw. wie oft Entwickler nach dem jeweiligen Mocking Framework bei Google eingeben.
Moq wird stetig weiterentwickelt. Die letzte Änderung am Quellcode ist aktuell ungefähr einen Monat her. Der Release Cycle von Moq ist nicht ganz so erfreulich, das letzte Release kam 2013 heraus. Die Dokumentation ist nicht ausführlich, sozusagen minimal. Es lassen sich aber im Internet viele Beispiele finden, weil Moq einen großen Bekanntheitsgrad hat und sich intuitiv anwenden lässt. Moq liegt – obwohl es eines der ältesten .NET Mocking Frameworks ist – im Trend, was sich mit Google Trends nachweisen lässt. Die Google Trends Kurve steigt stetig.
Rhino Mocks wurde seit 2010 nicht mehr weiterentwickelt, somit ist auch der Release Cycle nicht relevant. Rhino Mocks ist leider, wie die Entwicklung vermuten lässt, veraltet und der Google Trend geht stark zurück. Sehr positiv fällt bei Rhino Mocks dennoch die Dokumentation aus, die ausführlich und einfach verständlich ist. Mock Beispiele sind dennoch sehr häufig im Internet zu finden, was auf das Alter zurückzuführen ist.
Die Community und der Release Cycle sind auf Zack. Es werden im Jahr mehrere Releases erzeugt. Der Trend von NSubstitute geht nach oben. Es ist anzunehmen, dass NSubstitute eine ernstzunehmende Konkurrenz für Moq ist. Die Dokumentation ist ausführlich und leicht verständlich. Die Syntax ist “state of the art”, es ist eine Fluent API.
Wie bei NSubstitute ist der Release Cycle und die Community aktiv. Es werden ebenfalls mehrere Releases im Jahr erzeugt. Der Trend von FakeItEasy ist seit circa einem Jahr konstant hoch, somit ist auch FakeItEasy eine ernstzunehmende Konkurrenz für Moq und NSubstitute. Auch hier gilt: Die Syntax ist “state of the art”, es ist eine Fluent API.
Alle drei Mocking Frameworks unterstützen Fluent API. Fluent APIs sind “state of the art”, da die Syntax einfacher lesbar ist. Die Frameworks sind aufgrund der gleichen API Syntax und Technologiebasis ähnlich. NSubstitute verwendet keine Lambda Ausdrücke, die anderen beiden dagegen schon.
Die unterstützten Features der einzelnen Mocking Frameworks unterscheiden sich nur in kleinen Details, die meines Erachtens für eine erste Auswahl nicht relevant sind. Sollte das Team mit einen der Mocking Frameworks Erfahrungen haben, ist dies entscheiender als die Feature-Unterschiede.
Im nächsten Artikel werden wir ein ausgewähltes Mocking Framework detaillierter betrachten. Welches Mocking Framework es wird, wollen wir noch nicht verraten …