Testy

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ęśćNazwaCo robi?
1Arrange (Przygotuj)Tworzysz potrzebne dane, np. liczby do dodania
2Act (Działaj)Uruchamiasz swoją metodę, np. Dodaj(2, 3)
3Assert (Sprawdź)Sprawdzasz, czy wynik = 5

A TERAZ ZRÓBMY TO W VISUAL STUDIO

KROK 1 – Stwórz projekt konsolowy z klasą

  1. Otwórz Visual Studio 2022
  2. Wybierz: Nowy projekt → Aplikacja konsolowa (.NET) → Dalej
  3. Nazwij projekt: MojaAplikacja
  4. 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

  1. Kliknij prawym przyciskiem na rozwiązanie w „Eksploratorze rozwiązań”
  2. Wybierz: Dodaj → Nowy projekt
  3. Wybierz: Projekt testowy MSTest (.NET)
  4. Nazwij go: MojaAplikacja.Tests
  5. 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:

  1. Kliknij prawym przyciskiem na projekt MojaAplikacja.Tests
  2. Wybierz: Dodaj → Odwołanie…
  3. Zaznacz MojaAplikacja i kliknij OK

KROK 4 – Uruchom test

  1. W Visual Studio otwórz menu: Test → Uruchom wszystkie testy
  2. Otworzy się Test Explorer
  3. 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?
MojaAplikacjaTu masz swoją aplikację – np. klasę Kalkulator z metodami
MojaAplikacja.TestsTu 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):

KomendaCo sprawdza?Przykład użycia
Assert.AreEqualCzy wynik jest równy oczekiwanej wartościAssert.AreEqual(5, wynik);
Assert.AreNotEqualCzy wynik nie jest równyAssert.AreNotEqual(6, wynik);
Assert.IsTrueCzy warunek jest prawdziwyAssert.IsTrue(wynik > 0);
Assert.IsFalseCzy warunek jest fałszywyAssert.IsFalse(wynik < 0);
Assert.IsNullCzy coś jest nullAssert.IsNull(obiekt);
Assert.IsNotNullCzy coś nie jest nullAssert.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:

  1. 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(…)]
  2. 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ć 😊