hat jemand ein gutes Tutorial im Netz für Unit Tests mit VS 2010 gefunden? Leider habe ich auch nur die Professional variante, so dass einige Optionen wohl auch nicht zur Verfügung stehen.
Ein paar ganz einfache Tests habe ich schon implementiert. Konkret interessiert mich im Moment, wie ich die Dauer einer Klasse, die DB Abfragen durchführt testen kann. Also: Bei Dauer über 0.5 Sekunden soll der Test fehlschlagen, auch wenn das zurückgegebene Ergebnis stimmt.
wie ich die Dauer einer Klasse, die DB Abfragen durchführt testen kann.
das ist dann kein Unit-Test, sondern ein Integrationstest. Für den Unit-Test müsste der DB-Zugriff gemockt werden. (Daher bietet sich auf die Vewendung von Repository und Unit of Work an.)
Bei MsTest (so heißt das für VS korrekt) kenn ich mich nicht sehr gut aus, aber bei NUnit. Und da kann das was du testen willst einfach per NUnit - Timeout erledigt werden. Auch sonst hat NUnit ein paar mächtigere Attribute als es MsTest hat.
PS: Das soll nicht Werbung für NUnit sein, und auch keine Diskussion MsTest vs. NUnit heraufbeschwören, aber ich finde es halt besser :-)
NUnit kann kommerziell verwendet werden. In VS z.B. per VisualNUnit (gibts als Extension, geht aber nicht für die VS-Express) od. als Custom-Tool starten, etc. Es kann auch der MsTest-Runner verwendet werden, aber mit den NUnit-Attributen.
MS Test ist ein Framework für automatisierte Tests. NUnit hingegen ist ein Unit-Test Framework. Der Unterschied ist, dass mit MS Test vorranging System- und Integrationstests bewerkstelligt werden (sollten) und dazu gehört der Zugriff auf Datenbanken.
Bei Unit Tests geht es eher darum Klassen und die Interaktion zwischen einzelnen von ihnen zu prüfen. Deshalb sollten diese Tests unabhängig von Datenbanken, Dateien usw. sein. Ein Grund warum NUnit für Datenbanken und Dateiarbeit meiner Erfahrung nach keine oder kaum Methoden anbietet.
Die Krux ist aber, dass beide Arten von Testvorgehen gern gleichgesetzt und als Unit Test bezeichnet werden. Aber egal, du hattest eine Frage und die habe ich noch nicht beantwortet.
Zur Frage: Eine Art Timeout für einen Datenbankzugriff zu prüfen ist etwas schwer. Weil es auch stark davon abhängt wo dieser Test läuft, welche Umgebungsprozess noch laufen usw. Es kann also sein, dass der Test bei unterschiedlichen Ausführungen unterschiedlich ausgeht, vorallem wenn andere Tests parallel ausgeführt werden, was durchaus passieren kann.
Ein Database-Unittest in VS ist aber nicht das was der OT will. mit diesen können SProcs, Trigger, etc. in der Datenbank getestet werden, aber nicht der Zugriff von User-Code.
Leider habe ich wie gesagt nur die professionell Variante. Damit sind mit ms Test keine db Test möglich. Was mir noch fehlt ist eine gute Ableitung für nunit inklusive des Plugins für Vs.
Ich denke eine Anleitung für NUnit ist nicht nötig wenn du programmieren kannst. Es sind ja nur Klassen/Methoden mit Attributen und diese werden bei der NUnit-Doku auch erklärt. Ich denke du suchst eher ein Tut. fürs Unit-Testen allgemein. Oder täusche ich mich?
So kann man natürlich auch anfangen. Ich lerne nur lieber/besser mit dem konkreten Anwendungsfall. Also gleich mit dem Tool, mit dem ich später arbeiten möchte/muss