Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc

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.

Opublikowane 21 września 2007 12:41 przez nuwanda

Komentarze:

# re: xUnit.Net (beta)

28 września 2007 13:21 by Dariusz "RockY" Tarczyński

Ok. Fajnie. Pierwszy test w Xunicie:

public class SmokeTest

   {

       [Test]

       public void Test()

       {

           Assert.Same(1, 1, "not the same");

       }

   }

O dziwo nie powiódł się?!

Natomiast:

public class SmokeTest

   {

       [Test]

       public void Test()

       {

           Assert.Same("darek", "darek", "not the same");

       }

   }

Jest OK. Czegoś tu nie rozumiem?

# re: xUnit.Net (beta)

28 września 2007 14:26 by nuwanda

Przede wszystkim źle używasz metody Same. Służy ona do porównywania obiektów, a nie wartości (służy do tego metoda Equals). Te dwie metody wyglądają niemal identycznie, ale różnica w działaniu jest zasadnicza. Przypadek, który tu przedstawiłeś bardzo dobrze został opisany tu

-> http://weblogs.asp.net/bsimser/archive/2006/04/17/443136.aspx

# re: xUnit.Net (beta)

29 września 2007 01:08 by Dariusz "RockY" TarczyÅ„ski

No fakt. Dzieki za korekte (i linka).

# re: xUnit.Net (beta)

2 października 2007 10:39 by nuwanda

Jeżeli widząc kształt xUnita oraz różnice w stosunku do NUnita zadawaliście sobie pytania czy to rzeczywiście lepiej (tak jak na przykład Roy Osherove - http://weblogs.asp.net/rosherove/archive/2007/09/21/xunit-net-aims-to-be-the-next-nunit-but-it-s-too-soon.aspx) to zerknijcie na kilka słów wytłumaczenia - http://www.agileprogrammer.com/dotnetguy/archive/2007/09/21/23415.aspx

Komentarze anonimowe wyłączone