2010-05-03 12 views
8

Po uruchomieniu testów jednostkowych wszystkie testy zakończą się pomyślnie, ale zamiast "Uruchomienie testu powiodło się" lub jakikolwiek komunikat o powodzeniu, otrzymuję komunikat "Błąd uruchomienia testu" w małym pasku informującym mnie o tym. ile z moich testów zdało, mimo że wszystkie moje testy minęły.Błędy testu testowego z MSTest w VS2010

Kiedy klikam tekst, jestem przeniesiony na stronę, która mówi mi następujące wydarzyły się dwie rzeczy:

Warning: conflict during test run deployment: deployment item '[...]\Booking.Web.dll' directly or indirectly referenced by the test container [...]\Booking.Web.Tests.dll cannot be deployed to 'Booking.Web.dll' because otherwise the file '[...]\Booking.Web.dll' would override deployment item '[...]\Booking.Web.dll' directly or indirectly referenced by '[...]\Booking.Web.Tests.dll'

Error: Cannot initialize the ASP.NET project 'Booking.Web' Exception was thrown: The website could not be configured correctly; getting ASP.NET proccess information failed. Requesting ' http://localhost:54131/VSEnterpriseHelper.axd ' returned an error: The remote server returned an error: (500) Internal Server Error.

Nie rozumiem połowę tego, co to narzekają. Jak pozbyć się tych błędów?

(Dla porównania: Booking.Web to projekt ASP.NET MVC 2, Booking.Web.Tests to projekt testowy, [...] to pełna lokalna ścieżka do projektów w moim środowisku, w większości powyższych przypadków do folderu/bin/debug/wewnątrz projektu Booking.Web)

Aktualizacja: Zgodnie z instrukcją, szukałem więcej informacji w Podglądzie zdarzeń. Oto co znalazłem:

3008 A configuration error has occurred.
5/8/2010 2:26:15 AM
5/8/2010 12:26:15 AM
4ffbe9180c3d4c02adb9ac4d61dd0928
1
1
0
4484bbf4-1-129177519750954331
Full
/
D:\...\Booking.Web\
AASLOEG

1876
WebDev.WebServer40.EXE
Aasloeg\Tomas
ConfigurationErrorsException
Could not load file or assembly 'Ninject.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=79764a4ef1548af1' or one of its dependencies. Strong name signature could not be verified. The assembly may have been tampered with, or it was delay signed but not fully signed with the correct private key. (Exception from HRESULT: 0x80131045) at
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) at
System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() at
System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) at
System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) at
...stack trace in absurdum.

+0

Odwoływanie projekt ASP.NET w badanej jednostki jest prawie zawsze zły pomysł. –

+0

OK ... Więc jak powinienem się od tego uwolnić? –

+5

Refferencing projektu ASP.NET MVC w jednostce test jest powszechną praktyką. W przeciwnym razie, jak byś przetestował działania kontrolera? –

Odpowiedz

9

Przede wszystkim - masz włączone Ujęcie kodu. Możesz przeczytać o tym here. Nie ma więc problemów z testami jednostkowymi. To jest problem z pokryciem kodu.

Druga sprawa - to ostrzeżenie jest ok - nieważne.

Trzecia sprawa - ten błąd - to jest kluczowy problem.

Mogą występować różne problemy - najczęstsze jest odwołanie się do większej liczby złożeń. Aby dowiedzieć się, co dokładnie powinno być załadowane, należy przejść do strony Event Viewer i przejrzeć dzienniki systemu Windows-> Aplikacja

+0

Czy to działa? –

+0

Znajduję błąd w programie Ninject.Web.Mvc (dla którego pobrałem źródło i zbudowałem samodzielnie przeciwko bibliotekom DLL II i ASP.NET MVC 2), ale nie udało mi się pozbyć błędu, ponieważ Nie mogę się dowiedzieć, dlaczego ładowanie biblioteki dll nie działa poprawnie.Zaktualizuję mój wpis dzięki informacjom znalezionym w Podglądzie zdarzeń. Poza tym, jak mówisz, mam włączoną obsługę kodu - ale na którą część tego mówisz ma wpływ? –

+0

Cóż, możesz wyłączyć zasięg kodu. Ale jeśli tego potrzebujesz, powinieneś zrozumieć, dlaczego ten problem się pojawia. Rzeczywiście, jeśli sam je zbudowałeś, czy je podpisałeś? 'Ninject.Web.Mvc, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 79764a4ef1548af1 - oznacza, że ​​szuka podpisanego zespołu. Rozumiem - wygląda to dość dziwnie, że można uruchomić stronę internetową, ale zasięg kodu z jakiegoś powodu nikt nie rozumie, wymaga więcej zestawów, które mają być zawarte w aplikacji. –

4

Miałem ten sam błąd związany z testem MS, narzekając, że biblioteka DLL może "zastąpić element instalacji blah.dll".

to się dzieje, bo biegł MS-Test na stwardnienie DLL naraz tak:

mstest.exe /testcontainer:Tests.web.dll /testcontainer:Tests.svcs.dll /testcontainer:Tests.core.dll 

Gdy MS-Test został uruchomiony to, że próbował odebrać wszystkie dane wyjściowe DLL z testów i miejsce je w katalogu /Out katalogu przebiegu testowego. W moim przypadku, Tests.svcs.dll i Tests.core.dll zarówno odwołanie ten sam zespół (Core.dll) i dlatego próbowali skopiować że DLL w tym samym miejscu dwukrotnie (tym samym powodując ostrzeżenie).

Aby rozwiązać ten problem, ja oddzielone testy biegnie dla każdego zespołu, który dał każdemu próbny swój własny /Out folder wyjściowy DLL

mstest.exe /testcontainer:Tests.web.dll 

mstest.exe /testcontainer:Tests.svcs.dll 

mstest.exe /testcontainer:Tests.core.dll 
+0

Nie zawsze jest to możliwe. W moim przypadku uruchamiam test na serwerze CI i muszę uruchomić je wszystkie razem, aby wygenerować pojedynczy plik wynikowy. –

+0

Z jakiego elementu CI korzystasz? Wszystkie moje testy uruchamiam w Hudson/Jenkins, a wtyczka, której używamy do wyświetlania wyników, może łączyć wiele plików wyników. Po prostu nadajemy jej symbol wieloznaczny: /TestResults/*.trx –

+0

Używam Jenkinsa. Którą wtyczkę używasz do przetwarzania wyników trx? –