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 elkészített megoldással szeretné követni az oktatóanyagot, a kezdés előtt megtekintheti vagy letöltheti a mintakódot. A letöltési utasításokért tekintse meg példákat és 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.
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.
Ebben az új könyvtárban futtassa a dotnet new sln parancsot egy új megoldás létrehozásához. Ez megkönnyíti az osztálytár és az egységtesztelési projekt kezelését.
A megoldáskönyvtáron belül hozzon létre egy MathService könyvtárat. Az eddigi könyvtár és fájlstruktúra az alábbiakban látható:
/unit-testing-with-fsharp
unit-testing-with-fsharp.sln
/MathService
Állítsa be a MathService mappát aktuális könyvtárként, és futtassa a dotnet new classlib -lang "F#" parancsot a forrásprojekt létrehozásához. Egy hibás implementációt fog létrehozni a matematikai szolgáltatáshoz.
module MyMath =
let squaresOfOdds xs = raise (System.NotImplementedException("You haven't written a test yet!"))
Állítsa vissza a könyvtárat az unit-testing-with-fsharp könyvtárra. Futtassa dotnet sln add .\MathService\MathService.fsproj az osztálytárprojekt megoldáshoz való hozzáadásához.
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árba, és hozzon létre egy új projektet a dotnet new mstest -lang "F#"használatával. Ez létrehoz egy tesztprojektet, amely az MSTestet 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="15.3.0-preview-20170628-02" />
<PackageReference Include="MSTest.TestAdapter" Version="1.1.18" />
<PackageReference Include="MSTest.TestFramework" Version="1.1.18" />
</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 MSTestet. 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 mintaadattárában látható.
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
MathServiceTests.fsproj
Hajtsa végre a dotnet sln add .\MathService.Tests\MathService.Tests.fsproj-t a egységtesztelés-fsharp könyvtárban.
Az első teszt létrehozása
Írjon egy sikertelen tesztet, tegye sikeressé, majd ismételje meg a folyamatot. Nyissa meg Tests.fs, és adja hozzá a következő kódot:
namespace MathService.Tests
open System
open Microsoft.VisualStudio.TestTools.UnitTesting
open MathService
[<TestClass>]
type TestClass () =
[<TestMethod>]
member this.TestMethodPassing() =
Assert.IsTrue(true)
[<TestMethod>]
member this.FailEveryTime() = Assert.IsTrue(false)
A [<TestClass>] attribútum egy teszteket tartalmazó osztályt jelöl. A [<TestMethod>] 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 MSTest tesztfuttatója 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 négyzeteinek listájá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 teszteredmények létrehozása a metódushoz szükséges funkciók létrehozását jelenti.
A legegyszerűbb teszt, amit írhatunk, az squaresOfOdds meghívása az összes páros számmal, ahol az eredménynek egész számok üres sorozatának kell lennie. A következő teszt:
[<TestMethod>]
member this.TestEvenSequence() =
let expected = Seq.empty<int> |> Seq.toList
let actual = MyMath.squaresOfOdds [2; 4; 6; 8; 10]
Assert.AreEqual(expected, actual)
Figyelje meg, hogy a expected sorozat listává lett konvertálva. Az MSTest-kódtár 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. Még nem hozta létre az implementációt. Ezt a tesztet úgy teheti meg, hogy a legegyszerűbb kódot írja be a Mathservice osztályba, amely működik:
let squaresOfOdds xs =
Seq.empty<int> |> Seq.toList
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 ezt az egyetlen tesztet futtatja. Á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:
[<TestMethod>]
member public this.TestOnesAndEvens() =
let expected = [1; 1; 1; 1]
let actual = MyMath.squaresOfOdds [2; 1; 4; 1; 6; 1; 8; 1; 10]
Assert.AreEqual(expected, actual)
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 |> Seq.toList
Figyelje meg a Seq.toListhívását. Ez létrehoz egy listát, amely megvalósítja a ICollection felületet.
Van még egy lépés: négyzetre emelni minden páratlan számot. Először írjon egy új tesztet:
[<TestMethod>]
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.AreEqual(expected, actual)
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
|> Seq.toList
Létrehozott egy kis könyvtárat és egységteszteket ehhez 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ította.