nUnit–Wykonywanie testów w osobnych AppDomain

Testy jednostkowe z natury muszą być wykonywane w izolacji. Wykonanie np. pierwszego testu nie powinno mieć żadnego znaczenia dla pozostałych. Analogicznie, kolejność ich wykonywania nie ma znaczenia. Zwykle jest to bardzo proste i osiąga się to poprzez np. mock’i.

Czasami jednak może zajść potrzeba całkowitej izolacji poprzez wykonywanie każdego testu w osobnej AppDomain. Myślę, że w 99% przypadków jednak, można bez tego obyć się. Ostatnio jednak, pisząc pewne narzędzie do Visual Studio, musiałem odizolować od siebie całkowicie to co znajduje się w pamięci. Na szczęście wystarczyło zainstalować poniższy pakiet NuGet:

Install-Package NUnit.ApplicationDomain

Następnie jakiejkolwiek testy wystarczy oznaczać odpowiednim atrybutem:

[Test, RunInApplicationDomain] public void MyTest() { }

Jeszcze raz zaznaczam, w większości przypadków fakt, że potrzebujemy wykonać test w osobnej AppDomain powinien sygnalizować, że coś złego jest z naszym kodem. W przypadku jednak niektórych testów integracyjnych ma to sens – np. kiedy w teście musimy załadować zewnętrzny DLL, który potem chcemy usunąć z pamięci ponieważ nie powinien wpływać na następne testy. W CLR jedynym sposobem na usunięcie DLL z pamięci, jest zniszczenie AppDomain. W bardzo specyficznych scenariuszach testów integracyjnych, powyższe rozwiązanie ma sens.

Leave a Reply

Your email address will not be published.