TDD/BDD hat sich als Praktik beim Entwickeln in unserem Unternehmen mittlerweile fest etabliert, alle Kollegen testen mehr oder weniger Test-First, oder schreiben zumindest Unittests oder bringen bestehenden Legacycode unter Test. Als Testframework setzen wir bereits seit längerem xUnit mit den BDDExtensions von Björn Rochel ein.
Parallel dazu wurden in anderen Teams aber immer noch Unittests mit MSTest geschrieben, so daß wir nun eine heterogene Umgebung haben.
Seit der Umstellung auf VS2010 und TFS2010 kam nun die Diskussion auf, das einzusetzende Testframework von zwei auf eins zu reduzieren, also entweder xUnit oder MSTest weiterzuverwenden und die restlichen Tests zu migrieren. Aber welches soll es denn nun sein? Und es gibt ja auch noch NUnit, MbUnit und diverse andere ….
Auf meine Erfahrungen mit MSTest blicke ich eigentlich mit gemischten Gefühlen zurück, im Vergleich mit anderen Frameworks schien es mir langsamer zu sein, musste ausgiebig attributiert werden und ausserdem ist mir bei grossen Dateien mit vielen Tests immer die Testview abgeschmiert und man konnte fast gar nicht mehr arbeiten. Die Assertsyntax war auch nicht der Hammer …..
Ich bin ehrlich gesagt nicht informiert, was MSTest in VS2010 leistet, das wäre mal anzuschauen …
xUnit setze ich aus folgenden Gründen gerne ein:
- schneller(?)
- weniger Attributierung
- Möglichkeit zur Nutzung der BDDExtensions
- “bessere” Asserts
Für den Einsatz von MSTest spricht wohl die sehr gute Integration in das Studio/TFS, die war für mich schon in VS2005 sehr ansprechend, allerdings überwogen am Ende doch die o.g. Probleme und wir wechselten auf xUnit. Sollte es am Ende das “richtige” Framework gar nicht geben und das alles ist nur Geschmackssache? Oder gibt es weitere gute Gründe für das eine oder andere Framework?
24. September 2010 um 20:15
Genau vor der gleichen Entscheidung stehe ich auch. Xunit + BDD Extensions setzte ich ebenfalls schon länger und gerne ein. MSTest hat eine sehr schöne TFS Integration, die ich bei xUnit erst nachbauen müsste. Leider weiß ich noch nicht, wie einfach oder schwer es wäre, xUnit genauso schön in TFS zu integrieren (also mit Code Coverage, Reports usw.). Wenn ihr euch entschieden habt wäre ich sehr an euren Erfahrungen interessiert. Ich habe wahrscheinlich noch 2 Monate Zeit für eine Entscheidung.
24. September 2010 um 23:00
Eine solche Entscheidung wird es bei uns nicht geben, da NUnit gesetzt ist. In dem letzten Projekt haben wir aber mal MSTest eingesetzt: Die Assertsyntax ist wirklich nicht toll, lässt sich aber mit ExtensionMethods aufhübschen. Zum Schluss hatten wir quasi unsere eigenen BDDExtensions für MSTest?! Die Integration im TFS war auch recht gut. Dafür hatten wir anfangs mit MSTest etwas Probleme mit der Testisolation – wäre mit XUnit nicht passiert…
Bleibt letztlich vermutlich wirklich Geschmackssache.
Gruss Jan
30. September 2010 um 11:44
Hi,
danke für Euer Feedback. Ich habe kürzlich gelesen, daß sich SpecFlow, ein BDD-Framework, unter anderem gut in MSTest integrieren lassen soll. Werde das mal weiter verfolgen.
Gruß
Uwe
1. Oktober 2010 um 11:09
Hi Uwe!
Wir nutzen (noch) NUnit. Aus der langjährigen Historie unserer Entwicklung heraus war das schon immer so, wird aber aktuell zur Diskussion gestellt. Das Framework erscheint im Vergleich zu neueren (wie halt z.B. XUnit) zu kompliziert. Je komplizierter das Framework, desto geringer die Akzeptanz bei den Entwicklern. Die Integration ins Visual Studio ist ein eher untergewichtiges Argument. Die meisten Frameworks werden von Haus aus eh nicht unterstützt. Wie Du selbst schon sagtest, ist selbst die Integration von MS-Test nicht so der Hit. Drittanbieterkomponenten sind also sowieso notwendig. Je nach Geschmack z.B. Resharper oder Gallio… Wichtig aus Sicht TDD finde ich, dass die Tests über Tooling in den Buildprozess eingebunden und automatisiert ausgewertet werden können.
Aus der Erfahrung mit NUnit, MS-Test und XUnit heraus würde ich mich wohl wieder für XUnit entscheiden. Das dann in Kombination mit Gallio zum Ausführen und NCover zur Testung der Code Coverage. Das Deployment auf die Entwicklungsrechner und auf den Buildserver ist einfach zu bewerkstelligen. Maximaler Nutzen bei minimalem Aufwand…
)
Grüße,
Marco
17. Oktober 2010 um 23:16
[...] diesem Post hatte ich bereits darüber berichtet, daß in unserer Firma aus verschiedenen Gründen [...]
6. April 2011 um 08:57
Ich habe mich bis jetzt in meinen Projekten auch für NUnit oder xUnit entschieden, wobei ich seit ich xUnit kenne, diesem Framework den Vorzug gebe. Durch seine leicht andere Architektur (1 Instanz der Testklasse pro Test) gegenüber NUnit (1 Instanz pro TestFixture), haben wir einige Bugs in unseren Unit Tests gefunden, als wir von NUnit auf xUnit umgestellt haben.
Um komfortable und lesbare Assertions zu schreiben, empfehle ich dringend FluentAssertions (http://fluentassertions.codeplex.com/) oder etwas vergleichbares einzusetzen.
Grüsse,
Philipp