2010-06-08 16 views
9

Napisałem szereg testów jednostkowych w VS2010 Express i testy będące ich testami czasami zawodzą. Ponieważ ekspresowe wersje VS nie pozwalają na uruchamianie wtyczek, nie mogę po prostu zakręcić TestDriven.Net lub jego odpowiednikiem i debugować testy. Aby spróbować obejść ten Mam konwertowane mój zespół testowy do app konsoli i uczynił główną metodą wyglądać następująco:Debugowanie testów Nunit wewnątrz VS2010 Express

class CrappyHackToDebugUnitTestInVSExpress 
{ 
    public static void Main() 
    { 
    AppDomain.CurrentDomain.ExecuteAssemblyByName(
      @"C:\Program Files\NUnit 2.5.5\bin\net-2.0\nunit-console.exe", 
      new [] { Assembly.GetExecutingAssembly().Location, "/framework:4.0" }); 
    } 
} 

Teoretycznie powinienem móc uruchomić tę górę, określone punkty przerwy w moim teście . Jeśli to działało byłoby dopuszczalne obejść, ale wciąż otrzymuję następujący:

FileLoadException 
Could not load file or assembly 'C:\\Program Files\\NUnit 2.5.5\\bin\\net-2.0\\nunit-console.exe' 
or one of its dependencies. The given assembly name or codebase was invalid. 
(Exception from HRESULT: 0x80131047) 

Teraz plik istnieje i kiedy uruchomić ręcznie nunit-konsola działa poprawnie. Jaki może być mój problem?

+0

Dlaczego po prostu nie dołączasz do NUnit GUI Runner? –

+1

Nie można wykonać "dołącz do procesu" w Visual Studio Express. – user181813

Odpowiedz

6

Grałem z twoją koncepcją i wygląda na to, że problem nie jest bezpośrednio związany z ładowaniem pliku, ale z zależności.

Użyłem następujący kod zmodyfikowany:

a błąd był rzeczywiście udaje się zlokalizować nunit.core.dll, który znajduje się w katalogu/lib.

try 
     { 
      String NUnitPath = @"C:\Program Files\NUnit 2.5.7\bin\net-2.0\nunit-console.exe"; 

      AssemblyName asmName = System.Reflection.AssemblyName.GetAssemblyName(NUnitPath); 

      AppDomain.CurrentDomain.ExecuteAssemblyByName(asmName, new[] { Assembly.GetExecutingAssembly().Location, "/framework:4.0" }); 

     } 
     catch (Exception ex) 
     { 
      Trace.WriteLine(ex.Message); 
      Trace.WriteLine(ex.StackTrace); 
     } 

(Lubię coraz System.Reflection.AssemblyName ponieważ można sprawdzić i zobaczyć, że wszystko jest w porządku wersety surowej ścieżki pliku.)

Szybka kopia bulk (xcopy nunit. *. Dll) do mój katalog debugowania projektów testowych i działał dobrze. (Powinno być to banalne, aby odkryć wymagane minimalne zależności)

Testowane w VC# 2010 Express z NUnit 2.5.7 (breakpoints działają, ale tak naprawdę nie grałem z żadnymi innymi opcjami.) Chociaż jestem pewien, że może z niego zrobić możliwą do przeżycia opcję kompilacji.

Pozdrawiam!

PS - Pierwszy post tutaj, więc jestem trochę niesprawdzony, aby uzyskać sformatowane bloki kodu. Przepraszam z góry ..

7

Zasadniczo trzeba konwertować do złożenia aplikacji Windows Forms, dodać odwołanie do nunit-gui-runner.dll montażu i zmienić swoje główne metody wyglądać następująco:

[STAThread] 
    static void Main() 
    { 
     NUnit.Gui.AppEntry.Main(new string[] { Assembly.GetExecutingAssembly().Location }); 
    } 

oto kolejny przykład:

... 
using NUnit.Gui; 

namespace __libs 
{ 
    class Program 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
      NUnit.Gui.AppEntry.Main(new string[] { @"C:\test\bin\Debug\test.exe" }); 
     } 
    } 
} 

to pozwoli Ci wkroczyć w niektórych testach, ale nie jest bardzo dobra na czerwonym cyklu zielonego, więc będziemy chcieli to wykorzystać tylko podczas debugowania, a nie w innych okolicznościach.

+0

Jeśli kiedykolwiek wystąpi błąd środowiska wykonawczego w nowym projekcie, sprawdź, czy główny działa jako [STAThread]. Jeśli nie, NUnit GUI nie może załadować. – Johannes

+0

To jest świetne. Nasza linia brzmi następująco: "NUnit.Gui.AppEntry.Main (nowy ciąg [] {@" Test.exe ","/run "});', aby uniknąć twardego kodowania ścieżki (NUnit i tak to zobaczy), plus uruchamianie go automatycznie po załadowaniu. – javs

+0

404 na blogu – cod3monk3y

2

Miałem podobny problem podczas próby debugowania testów jednostkowych w VS C# express. Trudno było go uruchomić, ale potem dowiedziałem się o tym szablonie projektu. Działa doskonale w C# Express!

http://visualstudiogallery.msdn.microsoft.com/b8a7a8fa-9f5a-4b9b-8e8b-8839a4364f26?SRC=VSIDE

C# projektu szablonu

Zintegrowane testy z Visual Studio, w tym Visual C# Express, wersji

Samodzielne NUnit konsoli biegacza. Zezwalaj na pisanie testowych urządzeń i test , uruchamiany z Visual Studio po prostu naciskając F5 (test wsparcia debugowanie), lub Ctrl-F5 wolny bieg z wynikami w oknie konsoli. W przypadku awarii testowej sygnalizowany jest sygnałem dźwiękowym.

Zawiera podstawowe moduły NUnit do rozpoczęcia projektu testowego. Brak zależności zewnętrznych od . Po prostu utwórz nowy projekt za pomocą szablonu NUnit Test Application .

Powiązane problemy