Jak uruchomić NUnit w trybie debugowania z programu Visual Studio?

120

Niedawno budowałem ramy testowe dla trochę języka C #, nad którym pracowałem. Mam skonfigurowany NUnit i nowy projekt w moim obszarze roboczym, aby przetestować komponent. Wszystko działa dobrze, jeśli załaduję moje testy jednostkowe z Nunit (v2.4), ale doszedłem do punktu, w którym naprawdę przydatne byłoby uruchomienie w trybie debugowania i ustawienie kilku punktów przerwania.

Wypróbowałem sugestie z kilku przewodników, z których wszystkie sugerują zmianę właściwości „Debugowania” projektu testowego:

Start external program: C:\Program Files\NUnit 2.4.8\bin\nunit-console.exe
Command line arguments: /assembly: <full-path-to-solution>\TestDSP\bin\Debug\TestDSP.dll

Używam tam wersji konsolowej, ale próbowałem również wywoływać GUI. Oba dają mi ten sam błąd, kiedy próbuję rozpocząć debugowanie:

Cannot start test project 'TestDSP' because the project does not contain any tests.

Czy to dlatego, że normalnie ładuję \ DSP.nunit do GUI Nunit i tam właśnie odbywają się testy?

Zaczynam myśleć, że problem może polegać na tym, że VS chce uruchomić własną strukturę testową i dlatego nie może znaleźć testów NUnit?

Edycja : dla tych, którzy pytają o urządzenia testowe, jeden z moich plików .cs w projekcie TestDSP wygląda mniej więcej tak:

namespace Some.TestNamespace
{
    // Testing framework includes
    using NUnit.Framework;

    [TestFixture]
    public class FirFilterTest
    {
        [Test]
        public void Test01_ConstructorTest()
        {
            ...some tests...
        }
    }
}

... Jestem całkiem nowy w C # i frameworku testowym NUnit, więc jest całkiem możliwe, że przegapiłem kilka ważnych informacji ;-)

Ostateczne rozwiązanie : dużym problemem był projekt, którego użyłem. Jeśli wybierzesz Other Languages -> Visual C# -> Test -> Test Project... kiedy wybierasz typ projektu, Visual Studio spróbuje użyć własnego środowiska testowego, o ile wiem. Zamiast tego należy wybrać normalny projekt biblioteki klas C #, a wtedy instrukcje w wybranej odpowiedzi będą działać.

Jon Cage
źródło
Twoja klasa urządzeń testowych wygląda dla mnie dobrze, więc musi to być coś w projekcie, tak jak zasugerowałeś.
Patrick McDonald,
2
Spójrz na to pytanie: stackoverflow.com/questions/247900/ ... Odpowiedź jest taka sama ...
Patrick Desjardins

Odpowiedzi:

46

Używam tej samej techniki, co próbujesz Jon, bez flagi / assembly, tj

Start External Program: C:\Program Files\NUnit 2.4.8\bin\nunit.exe

Command line arguments: "<path>\bin\Debug\Quotes.Domain.Tests.dll"

Czy plik TestDSP.dll zawiera wszystkie Twoje elementy TestFixtures?

Ponieważ mój projekt testowy nie jest projektem startowym w rozwiązaniu, uruchamiam testy, klikając prawym przyciskiem myszy projekt testowy i wybierając opcję Debuguj -> Uruchom nową instancję

Patrick McDonald
źródło
1
Wypróbowałem to, co zasugerowałeś (usunięcie / Assembly), ale to nie robi różnicy. Kiedy uruchamiam nową instancję, generuje błąd. Myślę, że ma to głównie związek z faktem, że kiedy tworzyłem projekt TestDSP, utworzyłem go z szablonu projektu testowego wbudowanego w VisualStudio, więc szuka niewłaściwego środowiska testowego.
Jon Cage
3
Wreszcie udało się. Miałem rację, ponieważ to opcje projektu go zatrzymywały - ponowne utworzenie projektu testowego przy użyciu standardowego szablonu klasy rozwiązało problem.
Jon Cage
1
Pomaga, jeśli dodasz również /rundo swoich * argumentów wiersza poleceń, które automatycznie rozpoczną wykonywanie testów ... Podsumowałem to również (używając obrazów) w moim wpisie na blogu .
Robert Koritnik
6
Jeśli ludzie nie sprawdzają (bardzo przydatnego) posta na blogu Roberta ( erraticdev.blogspot.com/2012/01/… ): dla .NET 4.0 i nowszych, uważam, że musisz również dodać go do nunit.exe.config : <startup> <supportedRuntime version = "4.0" /> </startup>.
devuxer
3
Kontynuacja: W nowszych wersjach NUnit (najnowsza wersja na dziś to v2.6.1), musisz <supportedRuntime version="v2.0.50727" />dodać komentarz w nunit.exe.config.
devuxer
102

Kiedy potrzebuję debugowania moich testów NUnit, po prostu podłączam się do aplikacji NUnit GUI nunit-agent.exeza pomocą "Debug | Attach to Process" i uruchamiam testy z GUI. Wszystkie punkty przerwania w moich testach (lub testowanym kodzie) są trafione. Czy źle zrozumiałem twoje pytanie, czy to zadziała w twoim przypadku?

Matt Hamilton
źródło
7
Informacje dla Ciebie (i innych osób): polecenie Debuguj | Załącz nie jest dostępne w wersjach Express programu VS.
Richard,
15
Pamiętaj, że musisz wybrać opcję „Włącz obsługę programu Visual Studio” w oknie dialogowym Ustawienia programu NUnit -> Obsługa IDE
Julio Garcia
8
NET 4.0 i później, wierzę, trzeba także dodać do nunit.exe.config: <startup> <supportedRuntime version="4.0" /> </startup>.
devuxer
1
To jest szybki skrót do dołączania do właściwego procesu (uruchamiany w konsoli Menedżera pakietów): ($ dte.Debugger.LocalProcesses |? {$ _. Name.EndsWith ("nunit-agent.exe")}). Attach ()
bart
7
FYI: musisz dołączyć debugowanie do procesu o nazwie „nunit-agent.exe”, a NIE „nunit.exe”. W przeciwnym razie twoje punkty przerwania są ignorowane i zastanawiasz się, dlaczego ...
Jenny O'Reilly
21

Po prostu usuń linię, która wygląda

<ProjectTypeGuids>
    {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
</ProjectTypeGuids>

z pliku projektu. Ta linia w zasadzie mówi VS.Net, że jest to projekt testowy, stąd „Nie można rozpocząć projektu testowego”. Do Twojej wiadomości, tutaj pierwszy przewodnik mówi „to test”, drugi mówi „to jest C #”. Więcej informacji na temat tych Przewodników: http://www.mztools.com/Articles/2008/MZ2008017.aspx

user276648
źródło
18

Oprócz odpowiedzi udzielonej przez @Justin tutaj jest więcej szczegółów dotyczących NUnit 2.6.

Używając NUnit 2.6 dołącz do nunit.exe lub nunit-console.exe, a NIE agenta. Konfiguracja odnotowana przez @Justina jest nieco inna. Poniżej znajduje się przykład z nunit.exe.config (taki sam dla nunit-console.exe.config).

<startup useLegacyV2RuntimeActivationPolicy="true">
  <!-- Comment out the next line to force use of .NET 4.0 -->
  <supportedRuntime version="v2.0.50727" />  
  <supportedRuntime version="v4.0.30319" />
</startup>

W przypadku projektu testowego .NET 4, aby uzyskać punkty przerwania, musisz skomentować lub usunąć wiersz v2.0 zgodnie z sugestią komentarza. Kiedy już to zrobiłem, mogłem debugować projekt testowy .NET 4.0.

dblood
źródło
Udało mi się tylko z v2.0.50727linią podczas debugowania zestawów .NET 2 z VS2005 za pomocą nunit. ( v4Linia uniemożliwiła podłączenie debugera VS 2005).
Martin Ba
17

Jeśli używasz NUnit 2.4 lub nowszego, możesz umieścić następujący kod w swojej SetUpFixtureklasie. (Możesz to zrobić ze starszymi wersjami, ale będziesz musiał zrobić dowolny odpowiednik, który ma do SetUpFixture, lub skopiować go do samego testu).

[SetUpFixture]
public class SetupFixtureClass
{
    [SetUp]
    public void StartTesting()
    {
        System.Diagnostics.Debugger.Launch();
    }
}

To Debugger.Launch()powoduje, że po kliknięciu przycisku Uruchom w NUnit pojawia się następujące okno dialogowe.

Okno dialogowe debugera JIT

Następnie wybierasz działające wystąpienie programu Visual Studio z otwartym projektem (drugie na moim zrzucie ekranu), a następnie debuger zostanie dołączony, a wszelkie punkty przerwania lub wyjątki pojawią się w programie Visual Studio.

Scott Chamberlain
źródło
12

W Nunit 3.0.1 (używam VS2013), otwórz z menu głównego> Test> Windows> Test Explorer. Następnie w „Eksploratorze testów” kliknij prawym przyciskiem myszy przypadek testowy, możesz zobaczyć: wprowadź opis obrazu tutaj

Mam nadzieję że to pomoże.

Quinn
źródło
2
Dzięki za tę odpowiedź. O wiele prostsze niż wszystkie inne.
dano
Używam NUnit 2.5.9 w VS 2015 i działało z rozszerzeniem VS o nazwie „NUnit 2 Test Adapter”. Test można wykonać w oknie Eksploratora testów.
mggSoft,
6

Zainstaluj TestDriven.NET , który jest wtyczką do programu Visual Studio

Stamtąd możesz kliknąć prawym przyciskiem myszy zestaw testów jednostkowych i kliknąć Uruchom testy, aby uruchomić cały zestaw, kliknij prawym przyciskiem myszy klasę TestFixture, aby uruchomić tylko testy w tej klasie, lub kliknij prawym przyciskiem myszy metodę testową, aby uruchomić tylko tę metodę.

Możesz również przetestować za pomocą debugera, jeśli potrzebujesz punktu przerwania w testach w trybie debugowania.

Jon Limjap
źródło
2
170 USD to absurdalnie wysoka cena za takie narzędzie. Ktoś żłobił cenę?
Ben Hardy
Tak. Za takie pieniądze wolałbym raczej zainwestować w JetBrains Resharper, który następnie daje Test Runner za darmo z integracją debugowania i wieloma innymi funkcjami produktywności.
Roman
Dzięki Visual Studio 2012 możesz bezpłatnie pobrać narzędzie NUnit Test Runner z Nuget.
Jon Limjap,
6

Wypróbuj NUnitit - dodatek do programu Visual Studio typu open source do debugowania przypadków testowych NUnit

Strona główna - http://nunitit.codeplex.com/

abhilash
źródło
To całkiem nieźle, chociaż nie mogę znaleźć sposobu, aby to powiedzieć, żeby po prostu uruchomić pojedynczy test (?)
Jon Cage
3

Teraz ze zdjęciami:

  1. Uruchom NUnit gui ( Pobierz 2.6.2 stąd ), a następnie przejdź doFile -> Open Project

wprowadź opis obrazu tutaj

  1. Wybierz swój test .dllz folderu bin ( C:\......\[SolutionFolder][ProjectFolder]\bin\Debug\xxxxTests.dll)

  2. Przejdź do programu Visual Studio Debug -> Attach to process(otworzy się okno Dołącz do procesu)

  3. Z listy przewiń w dół i wybierz, nunit-agent.exea następnie kliknijAttach

wprowadź opis obrazu tutaj

  1. W tym momencie punkty przerwania w twoich testach powinny zmienić kolor na dojrzały i czerwony (z pustego).

  2. Kliknij Runna Nunit Guii powinieneś otrzymać breakpoint trafienie ...

Mam nadzieję, że zaoszczędzi ci to trochę czasu.

Matas Vaitkevicius
źródło
2

Jeśli możesz uruchomić konsolę / lub GUI, ale punkty przerwania nie są trafione, może to być spowodowane tym, że Twoja aplikacja działa w innym środowisku uruchomieniowym .NET niż NUnit. Sprawdź, czy plik nunit-console.exe.config / nunit.exe.config ma określone środowisko wykonawcze (konfiguracje znajdują się w tym samym katalogu co pliki nunit exe). Określ środowisko wykonawcze za pomocą węzła startowego:

<configuration>
    <startup>
       <supportedRuntime version="4.0" />
    </startup>
Justin Turner
źródło
2

Jeśli ścieżka projektu zawiera spacje, np. „Nowy projekt” w ścieżce, należy <path>\bin\Debug\New Project\Quotes.Domain.Tests.dllująć ścieżkę projektu Opcja Start -> Argumenty wiersza poleceń w podwójne cudzysłowy.

Spędziłem dużo czasu, aby to rozgryźć.

Gyan Sada
źródło
1

Odnośnie tego, co powiedział pan Patrick McDonald

Ponieważ mój projekt testowy nie jest projektem startowym w rozwiązaniu, uruchamiam testy, klikając prawym przyciskiem myszy projekt testowy i wybierając opcję Debuguj -> Uruchom nową instancję

Próbowałem ubiegać się o moją bibliotekę klas testowych, ale dostałem błąd dotyczący ścieżki, więc próbowałem usunąć 'Argumenty wiersza poleceń' i na szczęście działało to dobrze i zgodnie z oczekiwaniami.

Abdul Rahman Kayali
źródło
0

Wygląda na to, że próbujesz użyć niewłaściwej biblioteki. NUnit można uruchomić tylko wtedy, gdy używana dll zawiera TestFixtures.

+1 na TestDriven.Net. Miałem okazję go używać wiele razy. Możesz pobrać wersję osobistą do celów oceny zgodnie z licencją pod adresem http://testdriven.net/purchase_licenses.aspx .

Mike737
źródło
Zobacz ostatnią edycję - mam urządzenie testowe, chociaż jest całkiem możliwe, że nie ustawiłem go poprawnie.
Jon Cage
0

Otrzymałem ten sam błąd z MSTest. Odkryłem, że w oknie Test Output niektóre testy miały zduplikowane identyfikatory i nie można ich było załadować. Usunąłem wszystkie zduplikowane testy i teraz mogłem je uruchamiać podczas uruchamiania projektu.

Vijay
źródło
0

Obecnie dostępne jest również rozszerzenie „Visual NUnit”, które umożliwia uruchamianie testów z poziomu programu Visual Studio, podobnie jak uchwyty wbudowane w ramy testów. Sprawdź to w menedżerze rozszerzeń.

iamkrillin
źródło
0

Otwórz Visual Studio ---> Twój projekt ---> Wybierz `` Właściwości '' ---> Wybierz `` Debuguj '' -> Wybierz `` Uruchom program zewnętrzny '' i ustaw tam ścieżkę swojego NUnit (np .: Uruchom program zewnętrzny = C : \ Program Files \ NUnit 2.6.2 \ bin \ nunit.exe) ----> Zapisz

Po ustawieniu tego po prostu kliknij Debuguj

Farija Khan
źródło
0

Dla mnie rozwiązaniem było dostosowanie pliku konfiguracyjnego nunit. Aby użyć nunit z platformą 4.5-.Net i opcją kompilacji x64, musiałem dodać jedną linię do tagu startowego (obsługiwana wersja runtime).

<startup useLegacyV2RuntimeActivationPolicy="true">
        <!-- Comment out the next line to force use of .NET 4.0 -->
        <supportedRuntime version="v4.0.30319" />
</startup>

Potem mogłem zacząć od kliknięcia prawym przyciskiem myszy na Testproject Debug -> Start new instance. Wcześniej musiałem ponownie ręcznie dołączyć projekt do procesu.

Moje właściwości debugowania to C: \ Program Files (x86) \ NUnit 2.6.4 \ bin \ nunit.exe z argumentem lokalizacji testowanego pliku .dll.

Więcej informacji: nunit do testowania w .NET 4.0

HauiB
źródło
-1

Sprawdź, czy to pomaga. Jak dodać NUnit w programie Visual Studio

(RighteousRant) Chociaż osobiście nie podoba mi się to podejście. Jeśli potrzebujesz debuggera podczas testowania kodu, jest to „zapach”, ponieważ nie masz wystarczającej pewności siebie / nie wiesz, jak działa kod i potrzebujesz debugger, żeby ci to powiedzieć. TDD powinno uwolnić cię od potrzeby debuggera, jeśli zostanie zrobione dobrze. Użyj opcji „Dołącz debuger do NUNit” tylko w rzadkich przypadkach lub gdy brodzisz w czyimś kodzie.

Gishu
źródło
Próbowałem tam sugestii bezskutecznie. Wyraźnie masz dobry nos. Wiem, że mój kod nie działa, ponieważ dane wyjściowe, które otrzymuję dla pierwszego bloku implementacji, otrzymują bardzo różne odpowiedzi na moje odniesienie do testu. Więc teraz próbuję zagłębić się głębiej, aby znaleźć przyczynę problemu. Wolałbym to zrobić w oderwaniu od reszty programu (stąd potrzeba uruchamiania testów jednostkowych w trybie debugowania). Dla przypomnienia, oto kod, który napisał ktoś inny, a który został przekształcony z algorytmu innej osoby: - ​​/
Jon Cage
Więc to wpisuje się w ostatnią klauzulę w mojej ostatniej linijce :) Dziwne, że nie możesz tego jednak uruchomić… szkoda. Powiedziałbym, że po prostu dołącz do procesu (Alt + D + P) bez rozwodzenia się nad tym ...
Gishu
Nie ma tu zapachu - mam przypadek testowy, który zawodzi w niektórych środowiskach (zwracany jest bardzo zły wynik) i muszę dowiedzieć się, dlaczego. Aby to zrobić, chcę go debugować i dowiedzieć się, gdzie zawodzi w tym środowisku, aby móc naprawić kod i sprawić, by test przeszedł wszędzie. To wygląda na typowe czerwono-zielone rzeczy ...
BrainSlugs83
@ BrainSlugs83 - dawno to napisałem. Jestem (nadal) przeciwny debugowaniu twoich testów jako podstawowej praktyki w pracy. Przypadki skrajne - mogę przejść do debugera. Nawet wtedy prawdopodobnie wstawiłbym najpierw parametry rejestrowania .. Myślę, że wynika to z faktu, że zaobserwowałem zbyt wiele osób używających cyklu Code-Crash-Debug-Adjust, który zostaje usprawniony do cyklu Code-Crash-Adjust z debugerem stale włączone.
Gishu