2012-03-09 17 views
11

Wygląda na to, że mam problem, aplikacja, z której korzystamy, korzysta z jądra Ninject i zawiera określoną konfigurację, która jest zbierana z zawartością wywołania WCF (nazwa użytkownika, token ...).Uruchom testy jednostek w różnych aplikacjach z NUnit

W oparciu o tę konkretną konfigurację użytkownik ma przypisane prawa do aplikacji, jest to chronione przez konkretne wystąpienie w jądrze Ninject.

Nie możemy po prostu ponownie skompilować jądra Ninject, chcemy przeprowadzić kilka testów Nunit, ale uruchomić każdy z nich w osobnej domenie aplikacji (odtwarzając jądro za każdym razem z innymi ustawieniami).

Znalazłem tylko sposoby na uruchamianie całych projektów testowych w różnych domenach aplikacji, ale nie test na jeden test.

Czy istnieje sposób rozwiązania tego problemu?

Niestety konfiguracja Ninject nie jest po naszej stronie, musimy "żyć" z nią w ten sposób.

Odpowiedz

5

Nie sądzę, że istnieje sposób rozwiązania tego problemu bez ponownego pisania części kodu NUnit. Minęło trochę czasu, odkąd byłem w kodzie NUnit, ale jestem pewien, że główna część ładowania domeny aplikacji nie uległa zmianie.

NUnit zazwyczaj używa dwóch domen aplikacji. Domyślny, który jest tworzony po uruchomieniu NUnit i oddzielny, aby załadować zespoły testowe i zespoły, do których się odwołują. Głównym powodem jest to, aby umożliwić rozładowanie zestawów testowych. Nie można zwolnić biblioteki DLL, ale można zwolnić aplikację.

Możesz być w stanie uruchomić NUnit raz na test i zdać test z linii poleceń, ale to jest brzydkie i nie jestem pewien, czy to pomoże.

Może być również możliwe wykorzystanie Action Attributes w NUnit 2.6, ale zamierzasz tam wykonać dużo pracy.

Możliwe jest również utworzenie nowej domeny aplikacji w metodzie instalacji i wywoływanie jej w każdym teście. Niezręczny, ale możliwy.

Przykro mi, ale nie mam bardziej kompletnej odpowiedzi.

1

Nie jestem do końca pewien na twoje pytanie. Wygląda jednak na to, że potrzebujesz jakiejś niestandardowej implementacji. Czy rozważałeś niestandardowe atrybuty testowe? Następnie możesz skonfigurować każdy atrybut, aby działał w innej domenie aplikacji? Po prostu kręcę kilka pomysłów, ale mogą istnieć lepsze sposoby robienia tego.

+1

xUnit robi to domyślnie ... –

25

Potrzebowałem zrobić dokładnie to samo, więc stworzyłem bibliotekę, która zasadniczo bierze aktualny test i ponownie wykonuje go w nowej AppDomain. Jest to pakiet nuget o nazwie NUnit.ApplicationDomain i jest open source.

Przykład Kod:

[Test, RunInApplicationDomain] 
public void Method() 
{ 
    Console.WriteLine("I'm in a different AppDomain") 
} 
Powiązane problemy