Test jednostkowy
CO TO SĄ TESTY JEDNOSTKOWE?
Wyobraź sobie taką sytuację:
Piszesz aplikację, np. kalkulator. Masz metodę Dodaj(int a, int b), która ma dodawać dwie liczby. Super – działa.
Ale… skąd masz pewność, że zawsze działa dobrze? Że nie zwróci złego wyniku np. 2 + 2 = 5?
Tu wkraczają testy jednostkowe.
DEFINICJA PROSTYM JĘZYKIEM
Test jednostkowy to taki mały automatyczny programik, który sprawdza, czy Twoja metoda działa poprawnie.
- „Jednostka” = np. jedna metoda (Dodaj, Odejmij, ObliczBMI)
- „Test” = sprawdzenie, czy zwraca to, czego się spodziewamy
PRZYKŁAD Z ŻYCIA
Wyobraź sobie, że masz blender, który miksuje owoce.
Test jednostkowy to taki robot, który codziennie rano sprawdza:
- czy silnik działa,
- czy noże się kręcą,
- czy z bananów i mleka wychodzi koktajl, a nie zupa pomidorowa 😅
Nie testujemy całej kuchni – tylko blender.
CEL TESTÓW JEDNOSTKOWYCH
- Automatyczne sprawdzenie, czy dana funkcja robi to, co powinna
- Szybkie wykrycie błędów, zanim oddasz program
- Gwarancja, że zmieniając coś – nic innego się nie popsuło
Z CZEGO SKŁADA SIĘ TEST?
Typowy test jednostkowy składa się z 3 części – nazwijmy to zasadą AAA:
| Część | Nazwa | Co robi? |
|---|---|---|
| 1 | Arrange (Przygotuj) | Tworzysz potrzebne dane, np. liczby do dodania |
| 2 | Act (Działaj) | Uruchamiasz swoją metodę, np. Dodaj(2, 3) |
| 3 | Assert (Sprawdź) | Sprawdzasz, czy wynik = 5 |
A TERAZ ZRÓBMY TO W VISUAL STUDIO
KROK 1 – Stwórz projekt konsolowy z klasą
- Otwórz Visual Studio 2022
- Wybierz: Nowy projekt → Aplikacja konsolowa (.NET) → Dalej
- Nazwij projekt: MojaAplikacja
- Kliknij „Utwórz”
W pliku Program.cs możesz wkleić przykładową klasę z metodą:
public class Kalkulator
{
public int Dodaj(int a, int b)
{
return a + b;
}
}
KROK 2 – Dodaj projekt testowy
- Kliknij prawym przyciskiem na rozwiązanie w „Eksploratorze rozwiązań”
- Wybierz: Dodaj → Nowy projekt
- Wybierz: Projekt testowy MSTest (.NET)
- Nazwij go: MojaAplikacja.Tests
- Kliknij „Utwórz”
W pliku UnitTest1.cs zamień jego zawartość na:
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace MojaAplikacja.Tests
{
[TestClass]
public class KalkulatorTests
{
[TestMethod]
public void Dodaj_2plus3_Zwraca5()
{
// Arrange – przygotuj
var kalk = new MojaAplikacja.Kalkulator();
// Act – wykonaj
var wynik = kalk.Dodaj(2, 3);
// Assert – sprawdź wynik
Assert.AreEqual(5, wynik);
}
}
}
KROK 3 – Dodaj referencję do projektu głównego
Żeby test „widział” klasę Kalkulator, musisz:
- Kliknij prawym przyciskiem na projekt MojaAplikacja.Tests
- Wybierz: Dodaj → Odwołanie…
- Zaznacz MojaAplikacja i kliknij OK
KROK 4 – Uruchom test
- W Visual Studio otwórz menu: Test → Uruchom wszystkie testy
- Otworzy się Test Explorer
- Powinieneś zobaczyć zielony znacznik ✔️ – test przeszedł!
A CO JEŚLI ZMIENISZ METODĘ?
Zmień return a + b; na return a + b + 1; i uruchom test ponownie.
❌ Teraz test się nie powiedzie – pokaże błąd. Dzięki temu wiesz, że coś się zepsuło i możesz to naprawić.
PODSUMOWANIE!
Do testów jednostkowych potrzebujesz dwa projekty w jednym rozwiązaniu:
| Co? | Po co? |
|---|---|
| MojaAplikacja | Tu masz swoją aplikację – np. klasę Kalkulator z metodami |
| MojaAplikacja.Tests | Tu piszesz testy jednostkowe, które sprawdzają czy metody z MojaAplikacja działają dobrze |
Czym jest AAA?
AAA to skrót, który pomaga Ci zapamiętać, jak zawsze budować test jednostkowy. To nie są konkretne polecenia, tylko schemat działania testu:
Arrange – Przygotuj, Act – Wykonaj, Assert – Sprawdź
PRZYKŁAD:
// Arrange – przygotowuję dane
var kalk = new Kalkulator();
// Act – wywołuję metodę
var wynik = kalk.Dodaj(2, 3);
// Assert – sprawdzam czy wynik to 5
Assert.AreEqual(5, wynik);
Najczęściej używane komendy z Assert (czyli to, co sprawdza wynik):
| Komenda | Co sprawdza? | Przykład użycia |
|---|---|---|
| Assert.AreEqual | Czy wynik jest równy oczekiwanej wartości | Assert.AreEqual(5, wynik); |
| Assert.AreNotEqual | Czy wynik nie jest równy | Assert.AreNotEqual(6, wynik); |
| Assert.IsTrue | Czy warunek jest prawdziwy | Assert.IsTrue(wynik > 0); |
| Assert.IsFalse | Czy warunek jest fałszywy | Assert.IsFalse(wynik < 0); |
| Assert.IsNull | Czy coś jest null | Assert.IsNull(obiekt); |
| Assert.IsNotNull | Czy coś nie jest null | Assert.IsNotNull(obiekt); |
| Assert.Fail() | Wymuszenie błędu (np. gdy coś nie powinno się wykonać) | Assert.Fail(„Nie powinno tu dojść”); |
| [ExpectedException(typeof(…))] | Czy metoda rzuca wyjątek (np. dzielenie przez zero) | [ExpectedException(typeof(DivideByZeroException))] |
Skąd mam wiedzieć, czego użyć?
Pytaj siebie:
- Co chcesz przetestować?
- Czy metoda zwraca konkretną wartość? ➜ Assert.AreEqual(…)
- Czy coś nie powinno się wydarzyć? ➜ Assert.Fail() lub Assert.AreNotEqual(…)
- Czy spodziewasz się błędu? ➜ [ExpectedException(…)]
- Jaki jest oczekiwany wynik?
- Liczba: sprawdzam AreEqual
- Warunek: sprawdzam IsTrue / IsFalse
Skąd się tego nauczyć/znaleźć pomoc?
W Visual Studio:
- Jak wpiszesz Assert. i klikniesz Ctrl + Spacja, pokaże Ci dostępne opcje (IntelliSense)
- Możesz też najechać myszką i zobaczyć opis każdej metody
Możesz też zawsze zapytać mnie — podaj mi swoją metodę, a ja powiem Ci dokładnie, jaki test do niej napisać 😊
