2012-06-17 7 views
6

Hallo zusammen, ich mache eine Schach-AI als Hobby-Projekt mit Test Driven Development. Aber aus irgendeinem Grund ist die einzige Nachricht, die meine Tests geben, "Test hat eine Ausnahme ausgelöst: ...". Und deshalb das einzige, was zählt, weglassen. Anstatt den Fehler direkt zu lesen, muss ich jetzt mit der rechten Maustaste klicken und Testergebnisdetails anzeigen. Ich habe versucht, Spalten hinzuzufügen und zu entfernen, aber ich kann nicht die ganze Nachricht direkt angezeigt bekommen.Komponententest löst Ausnahme aus aber kann die Nachricht nicht sehen

Kann VS2010 so eingerichtet werden, dass die Ausnahmebedingung für jeden Komponententest direkt angezeigt wird?

edit: Ich bin mit standaard VS Unit-Tests:

[TestClass] 
public class MiniMaxTest 
{ 
    [TestMethod] 
    public void TestConstructor() 
    { 
     throw new Exception("Must I click view details to see this?"); 
    } 
} 

Warum diese Fragen? Ihr könnt diese Dinge reproduzieren. Debug oder Run Tests geben die gleichen Nachrichten: exception message remains hidden

+2

Konnten Sie mehr Details zur Verfügung stellen? Zum Beispiel, welches Testframework verwenden Sie (MSTest)? Wie sehen deine Tests aus? – stakx

+1

verwenden Sie MSTest? Wenn nicht, geben Sie Ihr Unit-Test-Tool an. Warum debütieren Sie nicht einfach Ihre Testmethode? – BrokenGlass

+0

Wenn ich das richtig verstanden habe, sagen Sie, dass das Feld oder die Spalte, die die Nachricht anzeigt, zu kurz ist, um die gesamte Ausnahme anzuzeigen? Nun, Komponententests sollten nicht ständig scheitern, also sollte es nicht so wichtig sein, "ab und zu zu klicken", um die Details zu sehen. – Groo

Antwort

2

Nein, ich glaube nicht, dass Sie VS konfigurieren können, um es anders zu zeigen. Die IDE zeigt die erste Zeile der Ausnahmebedingungsnachricht an, und im vollständigen Nachrichtentext befindet sich ein Zeilenvorschubzeichen. Sie müssen also auf die Details klicken, um das Ganze anzuzeigen.

Was Sie können jedoch tun, missbraucht das MSTest-Framework, um Ihre eigenen Nachrichten zu zeigen.

MS Test Assertions werden alle durch das Auslösen von Ausnahmen implementiert. Alle MS Test Assert Funktionen werfen Ausnahmen, die von abgeleitet sind. Visual Studio hat eine spezielle Handhabung für diese Art von Ausnahmen.

Zum Beispiel: Wenn Sie diesen Test schreiben:

[TestMethod] 
public void AllAboard() 
{ 
    throw new AssertFailedException("Failboat"); 
} 

AssertFailedException ist die Standard-Basisklasse für die meisten anderen Assertionsfehler.

Sie werden feststellen, dass VS2010 nicht drucken Sie die generische "test warf eine Ausnahme" Nachricht, stattdessen druckt es nur "Failboat".

Nun, was Sie tun können, umgibt Ihre Tests in Sachen, die normale Ausnahmen in AssertFailedException konvertieren und dann können Sie, was auch immer Nachrichten Sie möchten drucken.

[TestMethod] 
public void TestStuff() 
{ 
    try 
    { 
     string o = null; // pretend this came from some real code 
     var x = o.Split(new[] { ',' }); // this will throw NullRefException 
    } 
    catch (Exception e) 
    { 
     throw new AssertFailedException(e.Message, e); 
    } 
} 

Natürlich würde ich nicht empfehlen dies tatsächlich tun ... es ist ausführlich, und was noch wichtiger ist, verlieren Sie den Call-Stack ... aber hey, jetzt haben Sie ein weiteres Werkzeug in Ihrem toolbelt bekam

+0

+1 Für eine brauchbare Lösung, aber ich stimme zu, es scheint wie Overkill – Basic

+0

@Basic yeah, ich würde das total nicht tun, aber VS gibt Ihnen keine Optionen ... also, wenn Sie die Nachrichten reaaaaaaaaaaaaaaally wollen, ist das was du tun musst :-) –

Verwandte Themen