Komponententests in .NET Core und .NET StandardUnit Testing in .NET Core and .NET Standard

.NET Core wurde mit Prüfbarkeit als Hintergedanke entwickelt, sodass das Erstellen von Unittests für Ihre Anwendung einfacher als je zuvor ist..NET Core has been designed with testability in mind, so that creating unit tests for your applications is easier than ever before. Dieser Artikel gibt eine kurze Einführung zu Unittests (und wie sich diese von anderen Arten von Tests unterscheiden).This article briefly introduces unit tests (and how they differ from other kinds of tests). Verknüpfte Ressourcen zeigen, wie ein Testprojekt einer Lösung zugeordnet wird und anschließend Komponententests mithilfe der Befehlszeile oder Visual Studio ausgeführt werden.Linked resources demonstrate how to add a test project to your solution and then run unit tests using either the command line or Visual Studio.

.NET Core 2.0 unterstützt .NET Standard 2.0..NET Core 2.0 supports .NET Standard 2.0. Die zur Demonstration der Komponententests in diesem Abschnitt verwendeten Bibliotheken basieren auf .NET Standard und funktionieren auch in anderen Projekttypen.The libraries used to demonstrate unit testing in this section rely on .NET Standard and will work in other project types as well.

Ab .NET Core 2.0 sind Komponententest-Projektvorlagen sowohl für Visual Basic und F# als auch C# verfügbar.Beginning with .NET Core 2.0, there are unit test project templates for Visual Basic and F# as well as C#.

Erste Schritte mit TestsGetting Started with Testing

Eine Suite von automatisierten Tests ist eine der besten Möglichkeiten, um sicherzustellen, dass eine Softwareanwendung das tut, was von den Autoren verlangt wurde.Having a suite of automated tests is one of the best ways to ensure a software application does what its authors intended it to do. Es gibt verschiedene Arten von Tests für Softwareanwendungen, einschließlich Integrationstests, Webtests, Auslastungstests und Sonstige.There are different kinds of tests for software applications, including integration tests, web tests, load tests, and others. Komponententests, die einzelne Softwarekomponenten oder Methoden testen, sind Tests auf der untersten Ebene.Unit tests that test individual software components or methods are the lowest level tests. Unittests sollen nur Code im Steuerelement des Entwicklers testen und nicht Infrastrukturprobleme wie z.B. Datenbanken, Dateisysteme oder Netzwerkressourcen.Unit tests should only test code within the developer’s control, and should not test infrastructure concerns, like databases, file systems, or network resources. Unittests können mithilfe der testgesteuerten Entwicklung (Test Driven Development, TDD) geschrieben werden, oder sie können einem vorhandenen Code hinzugefügt werden, um dessen Richtigkeit zu bestätigen.Unit tests may be written using Test Driven Development (TDD), or they can be added to existing code to confirm its correctness. In beiden Fällen sollten sie klein, gut benannt und schnell sein, da Sie im Idealfall hunderte davon ausführen möchten, bevor Sie Ihre Änderungen dem freigegebenen Coderepository des Projekts übergeben.In either case, they should be small, well-named, and fast, since ideally you want to be able to run hundreds of them before pushing your changes into the project’s shared code repository.

Hinweis

Entwickler haben oft Probleme bei der Benennung für ihre Testklassen und Methoden.Developers often struggle with coming up with good names for their test classes and methods. Als Ausgangspunkt befolgt das ASP.NET-Produktteam diesen Konventionen.As a starting point, the ASP.NET product team follows these conventions.

Wenn Sie Unittests schreiben, achten Sie darauf, dass Sie nicht versehentlich Abhängigkeiten der Infrastruktur einführen.When writing unit tests, be careful you don’t accidentally introduce dependencies on infrastructure. Dies führt in der Regel dazu, dass Tests langsamer und anfälliger sind und sollten deshalb für Integrationstests reserviert werden.These tend to make tests slower and more brittle, and thus should be reserved for integration tests. Sie können diese versteckten Abhängigkeiten in Ihrem Anwendungscode vermeiden, indem Sie das Explicit Dependencies Principle (Explizites Abhängigkeitsprinzip) befolgen und Dependency Injection (Abhängigkeitseinfügung) verwenden, um Ihre Abhängigkeiten vom Framework anzufordern.You can avoid these hidden dependencies in your application code by following the Explicit Dependencies Principle and using Dependency Injection to request your dependencies from the framework. Sie können Ihre Unittests auch auf ein separates Projekt von Ihren Integrationstests beschränken, und sicherstellen, dass Ihr Unittestprojekt nicht über Referenzen für oder Abhängigkeiten auf den Infrastrukturpaketen verfügt.You can also keep your unit tests in a separate project from your integration tests, and ensure your unit test project doesn’t have references to or dependencies on infrastructure packages.

Möchten Sie mehr über Unittests in .NET Core-Projekten erfahren?Learn more about unit testing in .NET Core projects:

Komponententestprojekte für .NET Core werden für C#, F# und Visual Basic unterstützt.Unit Test projects for .NET Core are supported for C#, F# and Visual Basic. Sie können außerdem zwischen xUnit und MSTest wählen.You can also choose between xUnit and MSTest.

Sie können sich anhand dieser exemplarischen Vorgehensweisen über diese Kombinationen informieren:You can read about those combinations in these walkthroughs:

Sie können verschiedene Sprachen für Ihre Klassenbibliotheken und Komponententestbibliotheken auswählen.You can choose different languages for your class libraries and your unit test libraries. Durch Mischen und Abstimmen der oben beschriebenen exemplarischen Vorgehensweisen können Sie Erfahrungen sammeln.You can learn how by mixing and matching the walkthroughs referenced above.