Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez az oktatóanyag egy interaktív felületen mutatja be, hogyan hozhat létre lépésről lépésre egy mintamegoldást az egységtesztelési fogalmak megismeréséhez. Ha inkább egy előre összeállított megoldással szeretné követni az oktatóanyagot, a kezdés előtt tekintse meg vagy töltse le a mintakódot . A letöltési utasításokért tekintse meg a példákat és az oktatóanyagokat.
Ez a cikk egy .NET Core-projekt teszteléséről szól. Ha egy ASP.NET Core-projektet tesztel, olvassa el az ASP.NET Core Integrációs tesztekfejezetet.
Előfeltételek
- .NET 8 SDK vagy újabb verziók.
- Az Ön által választott szöveg- vagy kódszerkesztő.
A forrásprojekt létrehozása
Nyisson meg egy parancssor ablakot. Hozzon létre egy unit-testing-with-fsharp nevű könyvtárat a megoldás tárolásához. Az új könyvtárban futtassa a következő parancsot egy új megoldásfájl létrehozásához az osztálytárhoz és a tesztprojekthez:
dotnet new sln
Ezután hozzon létre egy MathService-címtárat . Az alábbi vázlat a könyvtárat és a fájlstruktúrát mutatja be eddig:
/unit-testing-with-fsharp
unit-testing-with-fsharp.sln
/MathService
Állítsa a MathService-t az aktuális könyvtárra, és futtassa a következő parancsot a forrásprojekt létrehozásához:
dotnet new classlib -lang "F#"
A matematikai szolgáltatás sikertelen implementációját hozza létre:
module MyMath =
let squaresOfOdds xs = raise (System.NotImplementedException("You haven't written a test yet!"))
Változtassa vissza a könyvtárat a unit-testing-with-fsharp könyvtárra. Futtassa a következő parancsot az osztálytárprojekt megoldáshoz való hozzáadásához:
dotnet sln add .\MathService\MathService.fsproj
A tesztprojekt létrehozása
Ezután hozza létre a MathService.Tests könyvtárat. Az alábbi ábra a könyvtárszerkezetet mutatja be:
/unit-testing-with-fsharp
unit-testing-with-fsharp.sln
/MathService
Source Files
MathService.fsproj
/MathService.Tests
Állítsa a MathService.Tests könyvtárat az aktuális könyvtárra, és hozzon létre egy új projektet az alábbi paranccsal:
dotnet new nunit -lang "F#"
Ez a parancs létrehoz egy tesztprojektet, amely az NUnitot használja tesztelési keretrendszerként. A létrehozott sablon konfigurálja a tesztfuttatót a MathServiceTests.fsproj:
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageReference Include="NUnit" Version="4.1.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
</ItemGroup>
A tesztprojekthez más csomagokra van szükség az egységtesztek létrehozásához és futtatásához.
dotnet new az előző lépésben hozzáadta az NUnit és az NUnit tesztadaptert. Most adja hozzá a MathService osztálytárat egy másik függőségként a projekthez. Használja a dotnet reference add parancsot:
dotnet reference add ../MathService/MathService.fsproj
A teljes fájl a GitHub
A következő végső megoldáselrendezést kell követnie:
/unit-testing-with-fsharp
unit-testing-with-fsharp.sln
/MathService
Source Files
MathService.fsproj
/MathService.Tests
Test Source Files
MathService.Tests.fsproj
Hajtsa végre a következő parancsot a unit-testing-with-fsharp könyvtárban:
dotnet sln add .\MathService.Tests\MathService.Tests.fsproj
Az első teszt létrehozása
Írsz egy sikertelen tesztet, sikerre viszed, majd megismétled a folyamatot. Nyissa meg a UnitTest1.fs-et , és adja hozzá a következő kódot:
namespace MathService.Tests
open System
open NUnit.Framework
open MathService
[<TestFixture>]
type TestClass () =
[<Test>]
member this.TestMethodPassing() =
Assert.That(true, Is.True)
[<Test>]
member this.FailEveryTime() = Assert.That(false, Is.True)
A [<TestFixture>] attribútum egy teszteket tartalmazó osztályt jelöl. A [<Test>] attribútum a tesztfuttató által futtatott vizsgálati módszert jelöli. A unit-testing-with-fsharp könyvtárban hajtsa végre a dotnet test parancsot a tesztek és az osztálykönyvtár létrehozásához, majd futtassa a teszteket. Az NUnit-tesztfuttató tartalmazza a tesztek futtatásához a program belépési pontját.
dotnet test elindítja a tesztfuttatót a létrehozott egységteszt-projekt használatával.
Ez a két teszt a legalapvetőbb átmenő és sikertelen teszteket mutatja.
My test áthalad, és Fail every time sikertelen lesz. Most hozzon létre egy tesztet a squaresOfOdds metódushoz. A squaresOfOdds metódus a bemeneti sorozat részét képező összes páratlan egész számérték négyzeteinek sorozatát adja vissza. Ahelyett, hogy egyszerre próbálná meg írni az összes függvényt, iteratív módon létrehozhat olyan teszteket, amelyek ellenőrzik a funkciót. Az egyes tesztek teljesítéséhez létre kell hoznia a metódushoz szükséges funkcionalitást.
A legegyszerűbb teszt, amit írhat, az az, hogy hívja meg a squaresOfOdds függvényt az összes páros számmal, ahol az eredménynek egy üres egész szám sorozatnak kell lennie. A következő teszt:
[<Test>]
member this.TestEvenSequence() =
let expected = Seq.empty<int>
let actual = MyMath.squaresOfOdds [2; 4; 6; 8; 10]
Assert.That(actual, Is.EqualTo(expected))
Figyelje meg, hogy a expected sorrend listává alakul. Az NUnit-keretrendszer számos szabványos .NET-típusra támaszkodik. Ez a függőség azt jelenti, hogy a nyilvános felület és a várt eredmények ICollection támogatják IEnumerablehelyett.
A teszt futtatásakor láthatja, hogy a teszt meghiúsul. Ennek az az oka, hogy még nem hozta létre az implementációt. Ezt a tesztet úgy teheti meg, hogy a legegyszerűbb kódot írja a MathService-projekt Library.fs osztályában, amely működik:
let squaresOfOdds xs =
Seq.empty<int>
A unit-testing-with-fsharp könyvtárban futtassa a dotnet test-t újra. A dotnet test parancs egy buildet futtat a MathService projekthez, majd a MathService.Tests projekthez. Mindkét projekt létrehozása után futtatja a teszteket. Két teszt most átmegy.
A követelmények teljesítése
Most, hogy teljesített egy teszteredményt, ideje többet írni. A következő egyszerű eset egy olyan sorozattal működik, amelynek egyetlen páratlan száma 1. Az 1-es szám egyszerűbb, mert az 1 négyzete 1. A következő teszt:
[<Test>]
member public this.TestOnesAndEvens() =
let expected = [1; 1; 1; 1]
let actual = MyMath.squaresOfOdds [2; 1; 4; 1; 6; 1; 8; 1; 10]
Assert.That(actual, Is.EqualTo(expected))
A dotnet test végrehajtása meghiúsul az új teszten. Az új teszt kezeléséhez frissítenie kell a squaresOfOdds metódust. A teszt sikeres végrehajtásához ki kell szűrnie az összes páros számot a sorozatból. Ezt egy kis szűrőfüggvény megírásával és a Seq.filterhasználatával teheti meg:
let private isOdd x = x % 2 <> 0
let squaresOfOdds xs =
xs
|> Seq.filter isOdd
Van még egy lépés: négyzetre emelni minden páratlan számot. Először írjon egy új tesztet:
[<Test>]
member public this.TestSquaresOfOdds() =
let expected = [1; 9; 25; 49; 81]
let actual = MyMath.squaresOfOdds [1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
Assert.That(actual, Is.EqualTo(expected))
A tesztet úgy javíthatja ki, hogy a szűrt sorozatot egy leképezési művelet segítségével átalakítja, és kiszámítja az egyes páratlan számok négyzetét.
let private square x = x * x
let private isOdd x = x % 2 <> 0
let squaresOfOdds xs =
xs
|> Seq.filter isOdd
|> Seq.map square
Létrehozott egy kis könyvtárat és egy készletnyi egységtesztet a könyvtárhoz. A megoldást úgy strukturálta, hogy az új csomagok és tesztek hozzáadása a normál munkafolyamat része legyen. A legtöbb időt és erőfeszítést az alkalmazás céljainak megoldására összpontosított.