2011-08-04 13 views
7

Postępuję zgodnie z tą radą, aby debugowanie działało na testy NUnit.Debugowanie testów Nunit w Visual Studio C# Express 2010

http://www.blackwasp.co.uk/NUnitCSharpExpress.aspx

Jednak mam kilka testów, które wykonują Assert.Throws<...>, co powoduje debugera przerwać, gdy wystąpi wyjątek jestem testowania dla, kiedy naprawdę chcę to przerwać, jeśli wystąpi wyjątek spoza tych połączeń .

W jaki sposób można uzyskać, aby debugger ignorował wyjątki spowodowane tymi rodzajami metod?


EDYCJA: Wydarzenie, które wypróbowałem poniżej, co nie działa!

[Test] 
public void InstanciatingWithNullParameterThrowsException() 
{ 
    try 
    { 
     Assert.Throws<ArgumentNullException>(() => new CachedStreamingEnumerable<int>(null)); 
     // This still throws and stops be being able to debug tests called after this one 
    } 
    catch 
    { 

    } 
} 
+2

Chciałbym również odpowiedzieć na ten problem, który nie zawiera żadnej z poniższych odpowiedzi. –

Odpowiedz

4

Oto co pracował dla mnie (choć w wizualna Studio Professional, nie Express, ale myślę, że to nie powinno mieć znaczenia).

  • wychować "Wyjątki" Dialog jako sugerowane przez Ninjapig.

  • Kliknij przycisk Add..., aby otworzyć okno dialogowe "Nowy wyjątek".

  • Wybierz „Common Language Runtime wyjątki” w rozwijanym polu
  • w polu edycji wpisać „NUnit.Framework.AssertionException”. Kliknij przycisk OK, aby zamknąć okno dialogowe "Nowy wyjątek".
  • powrotem w oknie „Wyjątki” upewnij się, że oba pola wyboru (ThrowniUser-unhandled) są niezaznaczone.

Teraz debugger powinien całkowicie zignorować niepowodzenie asercji NUnit (tzn. Wyrzucony, złapany lub nie, NUnit.Framework.AssertionException).

UPDATE: Zapobiegnie to włamaniu się do debuggera, nie może zignorować samego wyjątku; tj. nie zmieni faktycznego przepływu programu. Appart, zmieniając lub zastępując lub blokując wywołania Assert w blokach try-catch, nie sądzę, że jest coś, co może to osiągnąć (przynajmniej nie automatycznie).

+1

To nie działało, gdy debugger się zepsuł, gdy wyjątek, na który czekam, został zgłoszony, a nie, jeśli aserdzie się nie powiedzie. W moim przypadku jest to 'NullReferenceException', które otrzymuję. –

+0

@George Duckett: OK, teraz jestem zdezorientowany ;-) Zrozumiałem, że nie chcesz włamać się do debuggera w przypadku awarii operacji NUnit's Assert. *(); które manifestują się jako wyrzucane 'NUnit.Framework.AsertsertException'. Oczywiście, "ignoruj" w tym przypadku oznacza nie włamanie się do debuggera, program oczywiście otrzyma wyjątek i będzie postępował zgodnie z nim. Jeśli chcesz zrobić tak, jakby ten wyjątek się nie wydarzył, domyślam się, że nie możesz zrobić nic, oprócz tego, że nie rzucisz go w ogóle. –

+0

Przepraszam, spróbuję i wyjaśnię. W moich testach sprawdzam, czy występuje wyjątek. Kiedy wzywam nunit przy użyciu metody i znalazłem ją zrywa, gdy pojawia się ten wyjątek, którego szukam. Ponieważ faktycznie testuję wystąpienie tego wyjątku, chcę go zignorować, aby przejść do testów, które faktycznie chcę debugować. –

0

Nie jestem pewien, czy VS2010 Express ma tę opcję, ale można wybrać wyjątki do włamania.

Przejdź do menu „Debug”, a następnie wybierz „Wyjątki” Menu options

i stąd można wybrać co wyjątki złamać na Exceptions selection window

+0

Przyjemny pomysł, jednak nie chcę łamać określonych wyjątków, nie chcę się łamać, jeśli są one wyrzucane z metody "Assert.Throws". –

0

Ja skończyło się na przedstawieniu nunit-gui-runner.dll i powołując go jak

NUnit.Gui.AppEntry.Main(new string[] { Dll }); 

To wywołuje NUnit gui. Mogę wtedy uruchomić konkretny test, który mnie interesuje.

0

Miałem ten sam problem.Chociaż twoje oryginalne podejście (bez potrzeby bloku try...catch) działa dla większości typów wyjątków, ArgumentNullException nie działa. Naprawiłem to tak:

[Test] 
public void InstanciatingWithNullParameterThrowsException() 
{ 
    bool isArgumentNullExceptionThrown = false; 
    try 
    { 
     new CachedStreamingEnumerable<int>(null); 
    } 
    catch (ArgumentNullException) 
    { 
     isArgumentNullExceptionThrown = true; 
    } 
    Assert.That(isArgumentNullExceptionThrown); 
} 

To nie jest tak eleganckie, ale wygląda na to, że działa.

Powiązane problemy