Ich denke, die beste Antwort in Situationen wie dieser ist, sehr genau darüber nachzudenken, was Sie versuchen zu testen. Idealerweise sollte ein Komponententest versuchen, eine einzelne Tatsache über eine einzelne Methode oder Funktion zu testen. Wenn Sie anfangen, viele Dinge miteinander zu kombinieren, geht es in die Welt der Integrationstests über (die gleichermaßen wertvoll, aber unterschiedlich sind).
Für Unit-Testzwecke müssen Sie für die Testbarkeit testen, damit Sie nur das testen können, was Sie testen möchten. Dies beinhaltet typischerweise die zusätzliche Verwendung von Schnittstellen (ich nehme .NET von dem Code an, den Sie gezeigt haben) und irgendeine Form der Abhängigkeitsinjektion (erfordert jedoch keinen IoC/DI-Container, es sei denn, Sie möchten einen). Es profitiert auch von und ermutigt Sie, sehr zusammenhängende (single purpose) und entkoppelte (soft dependencies) Klassen in Ihrem System zu erstellen.
Wenn Sie also Geschäftslogik testen, die von Daten aus einer Datenbank abhängt, würden Sie normalerweise etwas wie die Repository Pattern verwenden und ein IXXXRepository in Unit-Tests einspeisen. Wenn Sie das konkrete Repository testen, müssen Sie entweder die Art von Datenbankbereinigung durchführen, nach der Sie fragen, oder Sie müssen den zugrunde liegenden Datenbankaufruf shim/stubben. Das liegt wirklich an dir.
Wenn Sie die Datenbank erstellen/ausfüllen/bereinigen müssen, können Sie die verschiedenen in den meisten Test-Frameworks verfügbaren Setup- und Teardown-Methoden nutzen. Aber seien Sie vorsichtig, denn einige von ihnen werden vor und nach jedem Test ausgeführt, was die Leistung Ihrer Komponententests ernsthaft beeinträchtigen kann. Tests, die zu langsam laufen, werden nicht oft ausgeführt, und das ist schlecht.
In MS-Test zeigen die Attribute, die Sie erklären Setup/Teardown sind ClassInitialize, ClassCleanUp, TestInitialize, TestCleanUp verwenden würde. Andere Frameworks haben ähnlich benannte Konstrukte.
Es gibt eine Reihe von Frameworks, die Ihnen mit den spöttischen/Anstoßen helfen: Moq, Rhino Mocks, NMock, TypeMock, Moles and Stubs (VS2010), VS11 Fakes (VS11 Beta), etc. Wenn Sie für Dependency Injection-Frameworks suchen, Schauen Sie sich Dinge wie Ninject, Unity, Castle Windsor usw. an.
Sie sollten auch die "TearDown" (oder die entsprechende Entsprechung in Ihrer Suite) verwenden, um zu bereinigen, denn wenn Ihr Test fehlschlägt, wird der Bereinigungscode nicht ausgeführt. –
Wie wäre es mit einer Ausnahme, die nach dem Aufräumen erneut geworfen wird? –
Jimmy Bogard (Autor von * AutoMapper *) hat einen tollen Artikel und ein Tool: [Zuverlässige Datenbank Tests mit Respawn] (https://losechies.com/jimmybogard/2015/02/19/reliable-database-tests-with-respawn /) –