Eben in dem Blog von Keyvan Nayyeri gelesen:

> > ##### **Unit Testing is Not Always Good** > > > > You may be interested to know that how much of unit testing is done for Waegis. Actually I started the development with heavy unit tests for almost everything. Waegis has a core platform that I tried to develop with the best quality and accuracy so I unit tested it carefully. After 1-1.5 months of development I abruptly believed that this project is going to take much longer than my initial estimation. Normally taking longer wasn't bad but for a self-managed project this could cause to failures so I had to make a new decision. My decision was to limit my unit tests to some critical parts of code. Based on experience and background these parts are easy to recognize so I chose this approach and this helped me to speed up my development and bring it to the web finally! Unit testing is great and I'm a big fan of it but this time I had to reduce and limit it in order to get the point. All the proven methodologies, software development processes and practices are there to teach you how to choose the best way so don't restrict yourself with them! [more...](http://nayyeri.net/blog/lessons-that-i-learned-from-waegis/) > >

image Ich lese den Blog von Keyvan schon eine Weile. Er ist nicht nur Autor von einigen Buchern im .NET Developmentbereich, sondern auch ein Tool-Developer fur verschieden Software. Ich selber nutze seine GraffitiCMS Extras auf diesem Blog.

Keyvan schreibt in seinem Post uber seine Erfahrung im konsequenten Einsatz mit Unit-Testing. Er spricht mir aus der Seele. Es es wichtig es zu tun, aber es ist noch wichtiger es zu unterlassen, wenn es sinnvoll und vertretbar ist. Wie beim Designen von Datenbanken, kommt es nicht auf die tausendste Table an, um die vierte Normalvorm zu erreichen. Es ist wichtiger das Ziel vor Augen zu haben und dieses mit vertretbaren Mitteln zu erreichen.

Ich habe zu “.NET 1.1 Zeiten” mit nUnit und Plugins fur Visual Studio begonnen. Beim Wechsel auf die Visual Studio Version 2005 war dann schon Unit-Testing direkt mit an Board. Seit der Version 2008 konnen auch Nutzer, der nicht “Team Editionen” auf die eingebauten Funktionen zuruckgreifen. Es wurde also erkannt, das es ein wichtiges Feature ist, dass nicht zwingend an der Große und Professionalitat der Entwicklung gebunden ist.

Wofur nutzt man also Unit-Testing? Meine Antwort gleicht der von Keyvan. Die Core Elemente sollten im permanenten Testing stehen. Am “Core” sollte ab einem gewissen Zeitpunkt so oder so keine gravierenden Änderungen vorgenommen werden. Somit hat man je nach Projektgroße eine uberschaubare Anzahl an Test-Items. Fur diese Falle rentiert es sich auch die entsprechenden Aufwande zu betreiben, die Umgebung auf Unittesting vorzubereiten. Die Ausgangssituation solle idealerweise immer dieselbe sein, aber gerade im Fall von Datenbank getriebenen System nicht gerade trivial zu erreichen. Ein weiteres Szenario in dem sich Unit-Testing anbietet, ist das fruhe Stadium eine Applikation. Wann wird zum Beispiel das erste Mal der Datenlayer beansprucht? Wie testet man die Login-Methode von die ASP.NET Front noch nicht steht? In solchen Fallen behilft sich der Entwickler in der Regel mit einer WinForm Applikation: WindowsFormsApplication1. Nach drei Tagen hat der Knopf “Button 1” die sechste Funktion und ist von vier weiteren Knopfen mit ahnlichem Schicksal umgeben. Hoffentlich wird dann nicht im Team entwickelt. Chaos ist vorprogrammiert. An dieser Stelle einfach Unit-Testing angewandt and und dann einfach in Ruhe lassen. Das ist kein Code der gewartet werden muss. Bei Konflikten im Refactoring lieber auf eine Migration verzichten.

Intensives Unit-Testing wird gerade in “schnellen” (kurzen wie auch schnell wechselnde Anforderungen) Projekten eher zum Hindernis. Bei einem kleinen Projekt auf einen Change zu reagieren, kann nicht (darf nicht) bedeuten tausend Zeilen Code furs Testing anpassen zu mussen. Bei einer vernunftigen Anzahl an Szenarien pro Test sind schnell mehr Zeilen Code im Unit-Test als in der getesteten Klasse gezahlt. Die Einfachheit einen Test fur eine Klasse mit den mitgelieferten Tools zu erzeugen, ist als trugerisch.

Fur was nutzt Unit-Testing? Und wie intensiv?

Ciao Marco