Az egységtesztek olyan tesztek, amelyek a kód egy kisebb egységét tesztelik, általában egy metódust vagy függvényt.
C#-ben számos unittest keretrendszer létezik, amelyek különböző célokra használhatók. Néhány példa:
A C#-ban az unit-tesztek készítésére a következő lépéseket kell követni:
Az xUnit egy nyílt forráskódú unittest keretrendszer C#-hez. Ez a keretrendszer lehetővé teszi a fejlesztők számára, hogy egységteszteket írjanak a C# kódjukhoz.
Az xUnit használatának lépései: - Telepítsük az xUnit-t: Az xUnit-t telepíthetjük a NuGet csomagkezelő segítségével. Ehhez nyissuk meg a projektünket a Visual Studio-ban, majd kattintsunk jobb gombbal a projektre és válasszuk a "Manage NuGet Packages" lehetőséget. Keressük meg az xUnit-t és kattintsunk a "Install" gombra. - Hozzunk létre egy teszt osztályt: Hozzunk létre egy új osztályt, amelyben a tesztek találhatók. - Írjunk egy teszt metódust: Írjunk egy új metódust, amelyben a teszt végrehajtódik. Ez a metódusnak [Fact] vagy [Theory] attribútummal kell rendelkeznie.
Teszt metódusok
Az xUnit-ben kétféle teszt metódus létezik:
using Xunit;
public class Calculator
{
public int Osszead(int a, int b)
{
return a + b;
}
}
public class CalculatorTests
{
[Fact]
public void Osszead_KetPozitivSzam()
{
// Arrange
Kalkulator kalkulator = new Kalkulator();
int a = 2;
int b = 3;
// Act
int eredmeny = kalkulator.Osszead(a, b);
// Assert
Assert.Equal(5, eredmeny);
}
}
Tesztelés beállítása C#-ban
A tesztelés beállításának lépései: - Nyissuk meg a projektünket. - Kattintsunk jobb gombbal a projektre és válasszuk a "Properties" lehetőséget. - Válasszuk a "Test" fület és állítsuk be a tesztelés beállításait. - Futtassuk a teszteket a "Test Explorer" ablakban.
Tesztelés futtatása - Nyissuk meg a "Test Explorer" ablakot - Válasszuk ki a teszteket - Futtassuk a teszteket a "Run All" gombra kattintva.
A fenti példában:
[Fact] attribútum jelzi, hogy ez egy egység teszt.Arrange szakaszban előkészítjük a teszt adatait.Act szakaszban végrehajtjuk a tesztelt műveletet.Assert szakaszban ellenőrizzük az eredményt.Magyarázat
A fenti példában teszteljük a Calculator osztály Add metódusát. A teszt a következőket teszi:
Calculator példányt.a és b értékét).Add metódust a teszt adatokkal.Ha a teszt sikeres, akkor az Add metódus helyesen működik. Ha a teszt megbukik, akkor valami probléma van a metódussal.
A xUnit keretrendszer számos további funkciót nyújt, például:
Az előző feladatban bemutatott példához a következő környezetet kell kialakítani:
Fájlok és könyvtárak
Calculator.cs: Ez a fájl tartalmazza a Calculator osztályt, amelyben van egy Add metódus.CalculatorTests.cs: Ez a fájl tartalmazza a CalculatorTests osztályt, amelyben van egy egység teszt a Calculator osztály Add metódusára.Könyvtár struktúra
CalculatorProject/: Ez a fő könyvtár, amelyben a projekt fájljai találhatók.
Calculator.cs: Ez a fájl a Calculator osztályt tartalmazza.CalculatorTests/: Ez a könyvtár a tesztekhez tartozik.
CalculatorTests.cs: Ez a fájl a CalculatorTests osztályt tartalmazza.Egy picit összetettebb példa:
Logic.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp.CLI
{
public class Logic
{
public int AddNumbers(short a, short b) {
return a + b;
}
}
}
UnitTest1.cs:
using ConsoleApp.CLI;
namespace ConsoleApp.Test
{
public class TestLogic
{
Logic logic;
public TestLogic() {
logic = new Logic();
}
[Theory]
[InlineData(4,2,2)]
[InlineData(6, 3, 3)]
[InlineData(6, 2, 3)]
public void TestPositive(int expectedValue, short operand1, short operand2)
{
Assert.Equal(expectedValue, logic.AddNumbers(operand1, operand2));
}
[Theory]
[InlineData(4, 2, 2)]
[InlineData(6, 3, 3)]
[InlineData(6, 2, 3)]
public void TestNegative(int expectedValue, short operand1, short operand2)
{
Assert.NotEqual(expectedValue, logic.AddNumbers(operand1, operand2));
}
}
}
1. feladatsor:
Minden metódushoz készüljön negatív és pozitív teszt!
add(a, b)
test_add_positive, test_add_negativesubtract(a, b)
test_subtract_positive, test_subtract_negativemultiply(a, b)
test_multiply_positive, test_multiply_negativedivide(a, b)
test_divide_positive, test_divide_negativeis_even(n)
True-t, ha a szám páros, egyébként False-t.test_is_even_positive, test_is_even_negativeis_odd(n)
True-t, ha a szám páratlan, egyébként False-t.test_is_odd_positive, test_is_odd_negativemax(a, b)
test_max_positive, test_max_negativemin(a, b)
test_min_positive, test_min_negativeabsolute(n)
test_absolute_positive, test_absolute_negativesquare(n)
test_square_positive, test_square_negative2. feladatsor
Minden metódushoz készüljön negatív és pozitív teszt!
sum_of_even_numbers(numbers)
count_odd_numbers(numbers)
find_max_number(numbers)
find_min_number(numbers)
is_palindrome(s)
True-t, ha a bemeneti string palindrom, egyébként False-t. A palindrom olyan szó, mondat vagy karaktersorozat, amely visszafelé olvasva is pontosan ugyanaz, mint előrefelé.remove_duplicates(numbers)
find_common_elements(list1, list2)
is_prime(n)
True-t, ha a bemeneti szám prímszám, egyébként False-t.find_factors(n)
is_sorted(numbers)
True-t, ha a bemeneti lista rendezett, egyébként False-t.3. feladatsor
Minden metódushoz készüljön negatív és pozitív teszt!
find_max(numbers)
find_min(numbers)
is_sorted(numbers)
remove_duplicates(numbers)
find_common_elements(list1, list2)
4. feladatsor
Minden metódushoz készüljön negatív és pozitív teszt!
calculate_area(shape, side)
calculate_perimeter(shape, side)
is_rectangle(sides)
find_diagonals(sides)