xUnit.net
xUnit.net (często określany po prostu jako xUnit) jest otwarto‑źródłowym frameworkiem do testowania jednostkowego przeznaczonym dla platformy .NET. Został zaprojektowany przez Jamesa N. Greene’a, współtwórcę NUnit, i po raz pierwszy udostępniony w 2007 roku. Framework jest szeroko stosowany w środowiskach programistycznych opartych na językach C#, F# i VB.NET, a także w projektach wykorzystujących ASP.NET oraz Xamarin.
Historia
Powstanie xUnit.net było odpowiedzią na krytykę istniejących frameworków testowych, m.in. NUnit i MSTest, które w tamtym okresie posiadały pewne ograniczenia związane z architekturą i integracją z najnowszymi wersjami platformy .NET. Pierwsza wersja (1.0) została wydana w 2007 roku, a od tego czasu projekt jest rozwijany w ramach GitHub (repozytorium wewnętrzne) i przyjmuje wkład społeczności.
Architektura i kluczowe cechy
- Modularność – xUnit.net składa się z kilku projektów NuGet (np.
xunit,xunit.runner.visualstudio,xunit.runner.console), co umożliwia elastyczne dobieranie komponentów. - Integracja z Visual Studio – dzięki paczce
xunit.runner.visualstudiotesty są automatycznie wykrywane i uruchamiane w oknie Test Explorer. - Wsparcie dla ciągłej integracji – istnieją oficjalne runner’y dla Azure DevOps, Jenkins i innych serwerów CI.
- Obsługa atrybutów – testy są definiowane przy użyciu atrybutów takich jak
[Fact](test jednorazowy) oraz[Theory](test parametryzowany). - Rozbudowany system asercji – biblioteka
xunit.assertumożliwia precyzyjne sprawdzanie wyników, w tym asercje dla wyjątków, kolekcji i asynchronicznych metod. - Wsparcie dla DI – testy mogą korzystać z wbudowanego mechanizmu wstrzykiwania zależności, co upraszcza przygotowanie środowiska testowego.
- „Fact” vs „Theory” – rozróżnienie pozwala na lepszą organizację testów parametryzowanych oraz umożliwia użycie danych źródłowych (np.
InlineData,MemberData).
Podstawowa składnia
Poniżej przedstawiono minimalny przykład testu jednostkowego w xUnit.net:
using Xunit;
public class KalkulatorTests
{
[Fact]
public void Dodaj_TwoNumbers_ReturnsCorrectSum()
{
// Arrange
var kalkulator = new Kalkulator();
// Act
var wynik = kalkulator.Dodaj(2, 3);
// Assert
Assert.Equal(5, wynik);
}
[Theory]
[InlineData(1, 2, 3)]
[InlineData(-4, 5, 1)]
public void Dodaj_RóżneDane_ZwracaPoprawnąWartość(int a, int b, int oczekiwany)
{
var kalkulator = new Kalkulator();
var wynik = kalkulator.Dodaj(a, b);
Assert.Equal(oczekiwany, wynik);
}
}
Integracja z narzędziami
Framework xUnit.net można łatwo zintegrować z:
- Visual Studio (przez NuGet i Test Explorer)
- JetBrains Rider (obsługa testów wbudowana)
- dotnet CLI (polecenie
dotnet test) - Azure DevOps (zadania VsTest i .NET Core)
- GitHub Actions (workflow
dotnet test)
Porównanie z innymi frameworkami
| Cecha | NUnit | MSTest | xUnit.net |
|---|---|---|---|
Wsparcie atrybutów Fact/Theory |
Nie | Nie | Tak |
| Domyślna integracja z Visual Studio | Tak (przez rozszerzenie) | Tak | Tak (przez xunit.runner.visualstudio) |
| Wsparcie dla DI | Ograniczone | Ograniczone | Pełne |
| Testy asynchroniczne | Tak | Tak | Tak (naturalna obsługa async Task) |
| Community‑driven (open source) | Tak | Nie (Microsoft) | Tak |
Współpraca z innymi technologiami .NET
xUnit.net jest kompatybilny z najnowszymi wersjami platformy .NET Core oraz .NET 5/6/7. Dzięki temu można testować aplikacje:
- serwisy ASP.NET Core (przy użyciu
WebApplicationFactory<TEntryPoint>) - aplikacje konsolowe (
dotnet run) - aplikacje mobilne (Xamarin i MAUI)
- biblioteki klasy (
.dll)
Praktyki i zalecenia
- Używaj
[Fact]do testów, które nie przyjmują parametrów. - Stosuj
[Theory]oraz atrybuty[InlineData]lub[MemberData]dla testów parametryzowanych. - Wykorzystuj
IClassFixture<T>iCollectionFixturedo współdzielenia kosztownych zasobów (np. połączenia z bazą danych). - Utrzymuj testy szybkie i izolowane – unikać zależności od zewnętrznych usług w testach jednostkowych.
- Stosuj asercje z biblioteki
xunit.assertoraz dodatkowe rozszerzenia, takie jakFluentAssertions(link wewnętrzny: FluentAssertions).
Zobacz także
- Testowanie jednostkowe
- Test‑Driven Development (TDD)
- Behavior‑Driven Development (BDD)
- Continuous Integration
- NuGet
Framework xUnit.net pozostaje jednym z najczęściej wybieranych narzędzi do testowania w ekosystemie .NET, zapewniając nowoczesną, elastyczną i dobrze zintegrowaną platformę dla programistów tworzących oprogramowanie o wysokiej jakości.