encyklopedia.space

xUnit

xUnit to rodzina frameworków służących do automatycznego testowania jednostkowego (ang. unit testing) w różnych językach programowania. Nazwa wywodzi się od pierwszego z serii frameworków – JUnit – i stała się swego rodzaju paradygmatem, który został zaadaptowany i rozszerzony w licznych ekosystemach, m.in. w C# (NUnit, xUnit.net), Java (JUnit, TestNG), Python (pytest, unittest) oraz wielu innych językach.

Historia

Pierwszy framework z serii xUnit, JUnit, został opublikowany w 1997 roku przez Kenta Becka i Ericha Gamę. Jego koncepcja opierała się na metodologii test‑driven development (TDD) oraz na zasadach programowania obiektowego. W kolejnych latach powstały kolejne implementacje, dostosowane do specyficznych wymagań języków i platform:

Kluczowe cechy frameworków xUnit

Wspólne dla większości implementacji xUnit są następujące elementy:

  1. Adnotacje/atrybuty – oznaczają metody testowe, metody przygotowujące (setup) i sprzątające (teardown). Przykład w JUnit: @Test, w NUnit: [Test].
  2. Asersje – zestaw metod sprawdzających poprawność wyników (np. assertEquals, Assert.AreEqual).
  3. Izolacja – każdy test powinien działać niezależnie od innych.
  4. Automatyzacja – możliwość uruchamiania testów w trybie ciągłej integracji (CI).
  5. Rozszerzalność – możliwość definiowania własnych reguł, zestawów danych i raportów.

Struktura testu w xUnit

Typowy test jednostkowy składa się z trzech faz:

  • Arrange (przygotowanie) – tworzenie obiektów i ustawienie stanu początkowego.
  • Act (działanie) – wywołanie testowanej metody.
  • Assert (weryfikacja) – sprawdzenie, czy wynik spełnia oczekiwane kryteria.

Popularne frameworki xUnit

Nazwa Język Rok powstania Główne cechy
JUnit Java 1997 Adnotacje, integracja z Maven/Gradle, wsparcie dla parametrów i testów przyrostowych.
NUnit C# 2002 Rozbudowane atrybuty, wsparcie dla .NET Core, integracja z Visual Studio.
xUnit.net C# 2007 Nowoczesna architektura, wsparcie dla DI, lekka konfiguracja.
TestNG Java 2004 Wielowątkowość, grupowanie testów, zależności między testami.
pytest Python 2004 Prosta składnia, fixture’y, bogate pluginy.

Przykład testu w xUnit.net (C#)

using Xunit;

public class KalkulatorTests
{
    [Fact]                     // oznaczenie testu
    public void Dodaj_TwojeLiczby_ZwracaPoprawnyWynik()
    {
        // Arrange
        var kalk = new Kalkulator();

        // Act
        int wynik = kalk.Dodaj(2, 3);

        // Assert
        Assert.Equal(5, wynik);
    }
}

Integracja z ciągłą integracją

Frameworki xUnit są powszechnie wykorzystywane w procesie ciągłej integracji i ciągłego wdrażania. Popularne serwisy CI, takie jak Jenkins, GitHub Actions czy GitLab CI, potrafią automatycznie uruchamiać testy przy każdym pushu do repozytorium, a wyniki są prezentowane w postaci raportów i wykresów trendów.

Krytyka i ograniczenia

  • Testy jednostkowe nie zastępują testów integracyjnych i systemowych – pokrywają jedynie wycinek funkcjonalności.
  • W niektórych projektach wprowadzenie testów jednostkowych może wymagać refaktoryzacji kodu, co zwiększa początkowy koszt.
  • Frameworki xUnit zakładają, że kod jest testowalny (np. brak silnych zależności statycznych), co nie zawsze jest spełnione.

Zobacz także