Uživatelské nástroje

Nástroje pro tento web


it:sw:unit_testing

Unit Testing a kvalita kódu

Unit Testing je proces automatizovaného ověřování funkčnosti jednotlivých komponent programu v izolaci. Cílem není najít všechny chyby v systému, ale zajistit, že každá jednotlivá část kódu (jednotka) dělá přesně to, co se od ní očekává.

1. Co je to "jednotka"?

Jednotkou se v objektově orientovaném programování rozumí obvykle jedna metoda třídy. Test by měl být:

  • Atomický: Testuje pouze jednu konkrétní věc.
  • Izolovaný: Testovaná metoda by neměla záviset na databázi, síti nebo souborovém systému (k tomu se používají tzv. Mocks – simulované objekty).
  • Rychlý: Tisíce testů by měly proběhnout v řádu sekund.

2. Proč psát unit testy?

Unit testing není „práce navíc“, ale investice, která se vrací v podobě:

  • Prevence regresních chyb: Máte jistotu, že nová úprava kódu nerozbila nic, co dříve fungovalo.
  • Odvážnější refaktoring: Pokud máte kód pokrytý testy, můžete jej čistit a měnit s jistotou, že zachováte funkčnost.
  • Dokumentace kódu: Testy slouží jako praktické příklady toho, jak se má daná metoda používat a co má vracet.
  • Lepší design: Kód, který se špatně testuje, je obvykle špatně navržen (porušuje principy SOLID).

3. Životní cyklus testu: AAA vzor

Většina unit testů se píše podle struktury AAA (Arrange, Act, Assert):

1. **Arrange (Příprava):** Nastavení testovacího prostředí, inicializace objektů a příprava vstupních dat.
2. **Act (Akce):** Zavolání testované metody.
3. **Assert (Ověření):** Kontrola, zda je skutečný výsledek shodný s očekávaným.
// Příklad v jazyce C# (NUnit)
[Test]
public void Add_TwoNumbers_ReturnsSum() {
    // Arrange
    var calculator = new Calculator();
    // Act
    var result = calculator.Add(2, 3);
    // Assert
    Assert.AreEqual(5, result);
}

4. TDD – Test Driven Development

TDD je metodika, kde test píšete dříve než samotný kód. Probíhá v cyklu:

1. **Red (Červená):** Napíšete test na funkci, která ještě neexistuje. Test selže.
2. **Green (Zelená):** Napíšete minimální množství kódu nutné k tomu, aby test prošel.
3. **Refactor (Refaktoring):** Vyčistíte kód, zatímco testy hlídají jeho funkčnost.

5. Metriky kvality: Code Coverage

Code Coverage (pokrytí kódu) udává, kolik procent řádků vašeho kódu je vykonáno během testů.

  • Vysoké pokrytí (např. 80 %+) dává vyšší jistotu stability.
  • Pozor: 100% pokrytí neznamená, že kód je bez chyb. Znamená to jen, že všechny řádky byly spuštěny, nikoliv že byly otestovány všechny logické kombinace.

6. Oblíbené nástroje (Frameworky)

Jazyk Frameworky
Java JUnit, TestNG
C# / .NET xUnit, NUnit, MSTest
Python PyTest, unittest
JavaScript Jest, Mocha
PHP PHPUnit

Související články:

Tagy: programming testing unit-testing tdd software-quality clean-code

it/sw/unit_testing.txt · Poslední úprava: autor: admin