xUnit.Net (beta)
Wczoraj James Newkirk, jeden z twórców NUnit ogłosił
wydanie pierwszej wersji (beta) nowego środowiska do pisania i uruchamiania
testów jednostek. Może nie byłoby w tym nic ciekawego, ot kolejny framework do
unit testów – a jest ich już dużo. Okazuje się jednak, że powody napisania nowego środowiska
mają solidne podstawy. Jak już napisałem wcześniej James jest twórcą NUnit, a także
aktywnym członkiem społeczności związanej z TDD. Jeżeli ktoś z Was śledził choć
trochę wypowiedzi na grupie Test-driven Development to na pewno zauważył mnogość
wątków dotyczących poprawnego pisania testów jednostek. Ludzie pytają jak łatwo
pisać testy jednostek tak, żeby w przyszłości, gdy będzie trzeba coś zmienić w
systemie, nie trzeba było zmieniać zbyt dużo kodu testów. Pytają jak pisać
testy, aby być pewnym, że przechodzący test będzie oznaczał poprawną
implementacje funkcji.
Od czasu powstania NUnit dużo się zmieniło. Powstała nowa
wersja .Net z wieloma udogodnieniami jak typy generyczne i anonimowe delegaty. W
środowisku TDD wyrobiły się pewne dobre praktyki, które pozwalają pisać dobry
kod testów jednostek. James postanowił zaprogramować te dobre praktyki, aby to
środowisko testów wymagało ich od programisty. I to mi się podoba!
W xUnit zrezygnowano z kilku, wydawało by się bardzo
ważnych, elementów. Nie znajdziemy na przykład atrybutu ExpectedException. Aby
oczekiwać wyjątku musimy napisać:
Assert.Throws<ArgumentException>(
delegate()
{
Token<string> token = Token<string>.Create("Id", "Val", 1);
});
Dzięki takiemu wywołaniu po tym jak zostanie zgłoszony
wyjątek możemy dalej kontynuować test, sprawdzając inne warunki. W przypadku
atrybutu metoda była kończona gdy występował wyjątek.
Drugą ważną zmianą jest brak metod inicjujących i kończących
test (odpowiednio atrybuty SetUp oraz TearDown). Ma to zapobiec przypadkowemu
zdefiniowaniu testów zależnych od siebie poprzez stan testowanego obiektu. W xUnit
tworzona jest osobna instancja klasy testowej dla każdej metody testowej (w
NUnit wszystkie metody testowe uruchamiane są na tej samej instancji klasy
testowej).
Co ciekawe już w wersji beta mamy pełną integrację z TestDriven.Net tak, że wystarczy ściągnąć bibliotekę xUnit, uruchomić dostarczony wraz z nią instalator i voila! integracja z VS gotowa :)
Podoba mi się. Co prawda w xUnit zdążyłem napisać dopiero
dwa testy ale już mi się podoba. Zobaczymy co będzie dalej. Jeżeli jesteście
zainteresowani szczegółowymi informacjami i pozostałymi zmianami to znajdziecie je na stronie projektu i w poście Jamesa.