Projektek rendszerezése és tesztelése a .NET CLI-vel
Ez az oktatóanyag a következő oktatóanyagot követi: Konzolalkalmazás létrehozása a .NET-tel a Visual Studio Code használatával, amely túlmutat egy egyszerű konzolalkalmazás létrehozásán, hogy fejlett és jól szervezett alkalmazásokat fejlesszen ki. Miután bemutatta, hogyan rendszerezheti a kódot mappákkal, az oktatóanyag bemutatja, hogyan bővítheti ki a konzolalkalmazásokat az xUnit tesztelési keretrendszerrel.
Megjegyzés
Ez az oktatóanyag azt javasolja, hogy az alkalmazásprojektet és a tesztprojektet külön mappákba helyezze. Egyes fejlesztők inkább ugyanabban a mappában szeretnék tartani ezeket a projekteket. További információ: GitHub-probléma dotnet/docs #26395.
Mappák használata a kód rendszerezéséhez
Ha új típusokat szeretne bevezetni egy konzolalkalmazásba, ezt úgy teheti meg, hogy hozzáadja a típusokat tartalmazó fájlokat az alkalmazáshoz. Ha például fájlokat és MonthlyReportRecords
típusokat ad AccountInformation
hozzá a projekthez, a projektfájl struktúrája egyszerű és könnyen navigálható:
/MyProject
|__AccountInformation.cs
|__MonthlyReportRecords.cs
|__MyProject.csproj
|__Program.cs
Ez a lapos szerkezet azonban csak akkor működik jól, ha a projekt mérete viszonylag kicsi. El tudja képzelni, mi történik, ha 20 típust ad hozzá a projekthez? A projekt biztosan nem lenne könnyű navigálni és karbantartani azzal a sok fájllal, amely a projekt gyökérkönyvtárát szemeteli.
A projekt rendszerezéséhez hozzon létre egy új mappát, és adja neki a Models nevet a típusfájlok tárolásához. Helyezze a típusfájlokat a Models (Modellek) mappába:
/MyProject
|__/Models
|__AccountInformation.cs
|__MonthlyReportRecords.cs
|__MyProject.csproj
|__Program.cs
Könnyen navigálhat és karbantarthat olyan projekteket, amelyek logikailag mappákba csoportosítják a fájlokat. A következő szakaszban egy összetettebb mintát hoz létre mappákkal és egységteszteléssel.
Rendszerezés és tesztelés a NewTypes Pets-minta használatával
Előfeltételek
- .NET 5.0 SDK vagy újabb verzió.
A minta létrehozása
Az alábbi lépések végrehajtásához kövesse a NewTypes Pets Sample (Újtípusok háziállatmintája ) lehetőséget, vagy hozzon létre saját fájlokat és mappákat. A típusok logikailag egy olyan mappastruktúrába vannak rendezve, amely lehetővé teszi további típusok hozzáadását később, és a tesztek logikailag is a mappákba kerülnek, amelyek lehetővé teszik a további tesztek későbbi hozzáadását.
A minta két típust tartalmaz, Dog
és Cat
egy közös felületet implementál velük: IPet
. NewTypes
A projekt célja, hogy a kisállatokkal kapcsolatos típusokat egy Háziállat mappába rendezze. Ha később újabb típuskészletet ad hozzá, például a WildAnimals a Háziállatok mappa mellett a NewTypes mappába kerül. A WildAnimals mappa tartalmazhat olyan állattípusokat, amelyek nem háziállatok, például Squirrel
és Rabbit
típusok. Így a típusok hozzáadásakor a projekt jól szervezett marad.
Hozza létre a következő mappastruktúrát a megadott fájltartalommal:
/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>net6.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
Futtassa a következő parancsot:
dotnet run
Szerezze be a következő kimenetet:
Woof!
Meow!
Nem kötelező gyakorlat: A projekt kibővítésével új kisállattípust (például egy Bird
) adhat hozzá. Adja meg a madár módszerét TalkToOwner
Tweet!
a tulajdonosnak. Futtassa ismét az alkalmazást. A kimenet a következőket tartalmazza: Tweet!
A minta tesztelése
A NewTypes
projekt a helyén van, és úgy szervezte meg, hogy a háziállatokkal kapcsolatos típusokat egy mappában tartja. Ezután hozza létre a tesztprojektet, és kezdjen el teszteket írni az xUnit tesztelési keretrendszerrel. Az egységtesztelés lehetővé teszi, hogy automatikusan ellenőrizze a kisállattípusok viselkedését annak ellenőrzéséhez, hogy megfelelően működnek-e.
Lépjen vissza az src mappához, és hozzon létre egy tesztmappát egy NewTypesTests mappával. A NewTypesTests mappából származó parancssorban futtassa a parancsot dotnet new xunit
. Ez a parancs két fájlt hoz létre: NewTypesTests.csproj és UnitTest1.cs.
A tesztprojekt jelenleg nem tudja tesztelni a típusokat, NewTypes
és projekthivatkozást igényel a NewTypes
projekthez. Projekthivatkozás hozzáadásához használja a dotnet add reference
következő parancsot:
dotnet add reference ../../src/NewTypes/NewTypes.csproj
Vagy manuálisan is hozzáadhatja a projekthivatkozást úgy, hogy hozzáad egy <ItemGroup>
csomópontot a NewTypesTests.csproj fájlhoz :
<ItemGroup>
<ProjectReference Include="../../src/NewTypes/NewTypes.csproj" />
</ItemGroup>
NewTypesTests.csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageReference Include="xunit" Version="2.8.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="../../src/NewTypes/NewTypes.csproj"/>
</ItemGroup>
</Project>
A NewTypesTests.csproj fájl a következő csomaghivatkozásokat tartalmazza:
Microsoft.NET.Test.Sdk
, a .NET tesztelési infrastruktúrájaxunit
, az xUnit tesztelési keretrendszerexunit.runner.visualstudio
, a tesztfuttatóNewTypes
, a tesztelni kívánt kód
Módosítsa a UnitTest1.cs nevet PetTests.cs értékre, és cserélje le a fájlban lévő kódot a következő kódra:
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);
}
}
Nem kötelező gyakorlat: Ha korábban olyan típust Bird
adott hozzá, amely egy értéket ad Tweet!
a tulajdonosnak, adjon hozzá egy tesztmetódust a PetTests.cs fájlhoz, hogy ellenőrizze, BirdTalkToOwnerReturnsTweet
hogy a TalkToOwner
metódus megfelelően működik-e a Bird
típushoz.
Megjegyzés
Bár elvárja, hogy a és actual
az expected
értékek egyenlőek legyenek, az Assert.NotEqual
ellenőrzéssel való kezdeti állítás azt határozza meg, hogy ezek az értékek nem egyenlők. Mindig először hozzon létre egy sikertelen tesztet a teszt logikájának ellenőrzéséhez. Miután meggyőződett arról, hogy a teszt sikertelen, módosítsa a helyességi feltételt, hogy a teszt sikeres legyen.
Az alábbiakban a teljes projektstruktúra látható:
/NewTypes
|__/src
|__/NewTypes
|__/Pets
|__Dog.cs
|__Cat.cs
|__IPet.cs
|__Program.cs
|__NewTypes.csproj
|__/test
|__NewTypesTests
|__PetTests.cs
|__NewTypesTests.csproj
Kezdje a test/NewTypesTests könyvtárban. Futtassa a teszteket a dotnet test
paranccsal. Ez a parancs elindítja a projektfájlban megadott tesztfuttatót.
A várt módon a tesztelés sikertelen lesz, és a konzol a következő kimenetet jeleníti meg:
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)
Módosítsa a tesztek helyességi adatait a következőre Assert.NotEqual
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);
}
}
Futtassa újra a teszteket a dotnet test
paranccsal, és szerezze be a következő kimenetet:
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)
Tesztelési passz. A kisállattípusok metódusai a megfelelő értékeket adják vissza, amikor a tulajdonoshoz beszélnek.
Elsajátította a projektek xUnit használatával történő rendszerezésének és tesztelésének technikáját. Folytassa ezekkel a technikákkal, és alkalmazza őket a saját projektjeiben. Boldog kódolást!
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: