2009-05-10 6 views
1

In der Vergangenheit habe ich für erwartete Ausnahmen wie diese haben getestet:C# -Testen - warum wird die ExpectedException-Methode übergeben, wenn die Ausnahme nicht ausgelöst wurde?

[TestMethod] 
public void TestThrowsException() { 
    try { 
    Foo(); 
    Assert.Fail(); 
    } catch (MyException ex){//good 
    } 
} 

aber ich merke, dass es eine (sauberer?) Weg, dies das ExpectedException Attribut zu testen. Warum besteht diese Testmethode, wenn die Ausnahme nicht ausgelöst wird? Dies vereitelt sicherlich den Zweck des Attributs.

[TestMethod] 
[ExpectedException(typeof(MyException))] 
public void TestThrowsException() { 
} 

[Bearbeiten] ich diesen Test bin mit Silverlight mit 2

Antwort

4

habe ich noch nie gesehen Pass - ist, dass wirklich alles was du hast? Sind Sie absolut sicher, dass Sie als TestMethod markiert haben? Zeigt der Testläufer es vorbei? Hast du definitiv den neuesten Code?

Ich werde doppelt überprüfen, aber ich bin sicher, das wird nicht ...

+1

Dito überall. –

+0

Congrats auf der 60k, btw –

+0

Ja, es ist vorbei. Um Ihnen einen Kontext zu geben, führe ich dies als einen Silverlight 2-Test durch, nicht sicher, ob das wichtig ist. Ich bekomme ein grünes Licht im Test. Um geistige Gesundheit zu überprüfen, wenn ich den Code zu dieser Änderung: [Testmethod] // [ExpectedException (typeof (MyException))] public void TestThrowsException() { throw new MyException(); } Und dies scheitert wie erwartet (rotes Licht in Silverlight Testseite). – Jason

0

Ich habe tatsächlich erlebt, dass ReSharper 4.5 testrunner nicht mit ExpectedException in NUnit 2.5 funktioniert. ... aber das sieht nach MSTest aus ... können Sie näher erläutern, welches Test-Framework Sie verwenden und welchen Test-Runner Sie verwenden, um die Tests durchzuführen?

+0

Ich benutze Microsoft.VisualStudio, QualityTools.UnitTest.Silverlight, Microsoft.Silverlight.Testing und Microsoft.Silverlight.Testing.Framework. Entschuldigung, sollte silverlight im ersten Beitrag erwähnt haben. – Jason

0

Du 'ExpectedException' mit einem zusätzlichen assert.fail verwendet werden soll, so dass der Test nicht bestanden, wenn die Ausnahme nicht ausgelöst wird (noch in VS 2010 mit .net 4 und Microsoft.VisualStudio.QualityTools.UnitTestFramework):

[TestMethod] 
[ExpectedException(typeof(MyException))] 
public void TestThrowsException() { 

    Do.SomethingThatThrowsAnException(); 
    assert.fail("No exception ;-("); 

} 
Verwandte Themen