Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieses Tutorial folgt auf das Tutorial: Erstellen einer Konsolenanwendung mit .NET mithilfe von Visual Studio Code. Dieses geht über die Erstellung einer einfachen Konsolen-App hinaus und behandelt die Entwicklung komplexer und gut strukturierter Anwendungen. Nachdem Sie gezeigt haben, wie Sie Mithilfe von Ordnern Ihren Code organisieren können, erfahren Sie, wie Sie eine Konsolenanwendung mit dem xUnit-Testframework erweitern.
Hinweis
In diesem Lernprogramm wird empfohlen, das Anwendungsprojekt und das Testprojekt in separaten Ordnern zu platzieren. Einige Entwickler bevorzugen es, diese Projekte im selben Ordner beizubehalten. Weitere Informationen finden Sie unter GitHub issue dotnet/docs #26395.
Verwenden von Ordnern zum Organisieren von Code
Wenn Sie neue Typen in eine Konsolen-App einführen möchten, können Sie dies tun, indem Sie Der App Dateien hinzufügen, die die Typen enthalten. Wenn Sie z. B. Dateien mit AccountInformation
und MonthlyReportRecords
Typen zu Ihrem Projekt hinzufügen, ist die Projektdateistruktur flach und einfach zu navigieren:
/MyProject
|__AccountInformation.cs
|__MonthlyReportRecords.cs
|__MyProject.csproj
|__Program.cs
Diese flache Struktur funktioniert jedoch nur gut, wenn die Größe Ihres Projekts relativ klein ist. Können Sie sich vorstellen, was passiert, wenn Sie dem Projekt 20 Typen hinzufügen? Das Projekt wäre auf jeden Fall schwierig zu navigieren und zu warten, außerdem würden viele Dateien das Stammverzeichnis des Projekts unübersichtlich machen.
Um das Projekt zu organisieren, erstellen Sie einen neuen Ordner, und nennen Sie ihn "Models ", um die Typdateien zu speichern. Platzieren Sie die Typdateien im Ordner "Models ":
/MyProject
|__/Models
|__AccountInformation.cs
|__MonthlyReportRecords.cs
|__MyProject.csproj
|__Program.cs
Projekte, die Dateien logisch in Ordner gruppieren, sind einfach zu navigieren und zu verwalten. Im nächsten Abschnitt erstellen Sie ein komplexeres Beispiel mit Ordnern und Komponententests.
Organisieren und Testen mithilfe des NewTypes Pets-Beispiels
Voraussetzungen
- .NET 5.0 SDK oder eine höhere Version.
Erstellen des Beispiels
Für die folgenden Schritte können Sie entweder das NewTypes Pets Sample verwenden oder eigene Dateien und Ordner erstellen. Die Typen sind logisch in einer Ordnerstruktur organisiert, die das Hinzufügen weiterer Typen später zulässt, und Tests werden auch logisch in Ordnern platziert, die später weitere Tests zulassen.
In diesem Beispiel sind zwei Typen enthalten, Dog
und Cat
, mit deren Hilfe die allgemeine Schnittstelle IPet
implementiert wird. Ihr Ziel für das NewTypes
-Projekt ist es, die auf Haustiere (pets) bezogenen Typen in einem Pets-Ordner zu organisieren. Wenn später weitere Typen hinzugefügt werden, werden wildAnimals beispielsweise zusammen mit dem Ordner "Haustiere" im Ordner "NewTypes" platziert. Der WildAnimals-Ordner kann womöglich Tierarten enthalten, die keine Haustiere sind, z.B. die Typen Squirrel
und Rabbit
. Dadurch, dass Typen hinzugefügt werden, bleibt das Projekt organisiert.
Erstellen Sie die folgende Ordnerstruktur mit den angegebenen Dateiinhalten:
/NewTypes
|__/src
|__/NewTypes
|__/Pets
|__Dog.cs
|__Cat.cs
|__IPet.cs
|__Program.cs
|__NewTypes.csproj
IPet.cs:
using System;
namespace Pets
{
public interface IPet
{
string TalkToOwner();
}
}
Dog.cs:
using System;
namespace Pets
{
public class Dog : IPet
{
public string TalkToOwner() => "Woof!";
}
}
Cat.cs:
using System;
namespace Pets
{
public class Cat : IPet
{
public string TalkToOwner() => "Meow!";
}
}
Program.cs:
using System;
using Pets;
using System.Collections.Generic;
namespace ConsoleApplication
{
public class Program
{
public static void Main(string[] args)
{
List<IPet> pets = new List<IPet>
{
new Dog(),
new Cat()
};
foreach (var pet in pets)
{
Console.WriteLine(pet.TalkToOwner());
}
}
}
}
NewTypes.csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
Führen Sie den folgenden Befehl aus:
dotnet run
Achten Sie auf die folgende Ausgabe:
Woof!
Meow!
Optionale Übung: Sie können einen neuen Haustiertyp hinzufügen, z. B. ein Bird
, indem Sie dieses Projekt erweitern. Die TalkToOwner
-Methode des Vogels soll einen Tweet!
an den Besitzer geben. Führen Sie die App erneut aus. Die Ausgabe wird Tweet!
enthalten.
Testen der Beispielanwendung
Das NewTypes
-Projekt ist platziert, und Sie haben es organisiert, indem Sie die auf Haustiere bezogenen Typen in einem Ordner gespeichert haben. Erstellen Sie als Nächstes Ihr Testprojekt, und beginnen Sie mit dem Schreiben von Tests mit dem xUnit-Testframework. Mithilfe von Komponententests können Sie das Verhalten Ihrer Haustiertypen automatisch überprüfen, um sicherzustellen, dass sie ordnungsgemäß funktionieren.
Navigieren Sie zurück zum Ordner "src ", und erstellen Sie einen Testordner mit einem Ordner "NewTypesTests" . Führen Sie in einer Eingabeaufforderung vom NewTypesTests-Ordner dotnet new xunit
aus. Dieser Befehl erzeugt zwei Dateien: NewTypesTests.csproj und UnitTest1.cs.
Das Testprojekt kann die Typen NewTypes
derzeit nicht testen und erfordert einen Projektverweis auf das NewTypes
Projekt. Verwenden Sie den dotnet reference add
Befehl, um einen Projektverweis hinzuzufügen:
dotnet reference add ../../src/NewTypes/NewTypes.csproj
Sie haben auch die Möglichkeit, den Projektverweis manuell hinzuzufügen, indem Sie der Datei NewTypesTests.csproj einen <ItemGroup>
Knoten hinzufügen:
<ItemGroup>
<ProjectReference Include="../../src/NewTypes/NewTypes.csproj" />
</ItemGroup>
NewTypesTests.csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageReference Include="xunit" Version="2.8.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="../../src/NewTypes/NewTypes.csproj"/>
</ItemGroup>
</Project>
Die Datei NewTypesTests.csproj enthält die folgenden Paketverweise:
Microsoft.NET.Test.Sdk
, die .NET-Testinfrastrukturxunit
, das xUnit-Testframework-
xunit.runner.visualstudio
, der Test Runner NewTypes
, der zu testde Code
Ändern Sie den Namen von UnitTest1.cs in PetTests.cs , und ersetzen Sie den Code in der Datei durch den folgenden Code:
using System;
using Xunit;
using Pets;
public class PetTests
{
[Fact]
public void DogTalkToOwnerReturnsWoof()
{
string expected = "Woof!";
string actual = new Dog().TalkToOwner();
Assert.NotEqual(expected, actual);
}
[Fact]
public void CatTalkToOwnerReturnsMeow()
{
string expected = "Meow!";
string actual = new Cat().TalkToOwner();
Assert.NotEqual(expected, actual);
}
}
Optionale Übung: Wenn Sie zuvor einen Bird
-Typ hinzugefügt haben, der Tweet!
dem Besitzer zurückgibt, fügen Sie der PetTests.cs-Datei eine Testmethode hinzu, BirdTalkToOwnerReturnsTweet
, um zu überprüfen, ob die TalkToOwner
-Methode für den Bird
-Typ ordnungsgemäß funktioniert.
Hinweis
Obwohl Sie erwarten, dass die Werte expected
und actual
gleich sind, gibt die anfängliche Assertion mit der Assert.NotEqual
-Überprüfung an, dass sie nicht gleich sind. Erstellen Sie zunächst immer einen Test, damit dieser fehlschlagen und die Logik des Tests überprüft werden kann. Nachdem Sie bestätigt haben, dass der Test fehlschlägt, passen Sie die Assertion an, damit der Test bestanden werden kann.
Im Folgenden ist die vollständige Projektstruktur dargestellt:
/NewTypes
|__/src
|__/NewTypes
|__/Pets
|__Dog.cs
|__Cat.cs
|__IPet.cs
|__Program.cs
|__NewTypes.csproj
|__/test
|__NewTypesTests
|__PetTests.cs
|__NewTypesTests.csproj
Beginnen Sie im Verzeichnis "test/NewTypesTests" . Führen Sie die Tests mit dem dotnet test
Befehl aus. Mit diesem Befehl wird der in der Projektdatei angegebene Testläufer gestartet.
Wie erwartet, schlägt der Test fehl, und die Konsole zeigt die folgende Ausgabe an:
Test run for C:\Source\dotnet\docs\samples\snippets\core\tutorials\testing-with-cli\csharp\test\NewTypesTests\bin\Debug\net5.0\NewTypesTests.dll (.NETCoreApp,Version=v5.0)
Microsoft (R) Test Execution Command Line Tool Version 16.8.1
Copyright (c) Microsoft Corporation. All rights reserved.
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.50] PetTests.DogTalkToOwnerReturnsWoof [FAIL]
Failed PetTests.DogTalkToOwnerReturnsWoof [6 ms]
Error Message:
Assert.NotEqual() Failure
Expected: Not "Woof!"
Actual: "Woof!"
Stack Trace:
at PetTests.DogTalkToOwnerReturnsWoof() in C:\Source\dotnet\docs\samples\snippets\core\tutorials\testing-with-cli\csharp\test\NewTypesTests\PetTests.cs:line 13
Failed! - Failed: 1, Passed: 1, Skipped: 0, Total: 2, Duration: 8 ms - NewTypesTests.dll (net5.0)
Ändern Sie die Assertionen Ihrer Tests von Assert.NotEqual
zu Assert.Equal
:
using System;
using Xunit;
using Pets;
public class PetTests
{
[Fact]
public void DogTalkToOwnerReturnsWoof()
{
string expected = "Woof!";
string actual = new Dog().TalkToOwner();
Assert.Equal(expected, actual);
}
[Fact]
public void CatTalkToOwnerReturnsMeow()
{
string expected = "Meow!";
string actual = new Cat().TalkToOwner();
Assert.Equal(expected, actual);
}
}
Führen Sie die Tests mit dem dotnet test
Befehl erneut aus, und rufen Sie die folgende Ausgabe ab:
Test run for C:\Source\dotnet\docs\samples\snippets\core\tutorials\testing-with-cli\csharp\test\NewTypesTests\bin\Debug\net5.0\NewTypesTests.dll (.NETCoreApp,Version=v5.0)
Microsoft (R) Test Execution Command Line Tool Version 16.8.1
Copyright (c) Microsoft Corporation. All rights reserved.
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
Passed! - Failed: 0, Passed: 2, Skipped: 0, Total: 2, Duration: 2 ms - NewTypesTests.dll (net5.0)
Die Tests werden erfolgreich ausgeführt. Die Methoden der Haustiertypen geben beim Sprechen mit dem Besitzer die richtigen Werte zurück.
Sie haben Techniken zum Organisieren und Testen von Projekten mithilfe von xUnit gelernt. Machen Sie mit diesen Techniken weiter, und wenden Sie sie in Ihren eigenen Projekten an. Viel Spaß beim Programmieren!