2010-03-25 9 views
35

Kann mir jemand sagen, warum dieser Unit-Test, der auf Ausnahmen überprüft fehlschlägt? Offensichtlich ist mein echter Test anderer Code zu überprüfen, aber ich verwende Int32.Parse, um das Problem zu zeigen.nUnit Assert.That (Methode, Throws.Exception) keine Ausnahmen abfangen

[Test] 
public void MyTest() 
{ 
    Assert.That(Int32.Parse("abc"), Throws.Exception.TypeOf<FormatException>()); 
} 

Der Test schlägt fehl und gibt diesen Fehler an. Offensichtlich versuche ich, diese Ausnahme zu testen, und ich denke, dass etwas in meiner Syntax fehlt.

Error 1 TestCase '.MyTest' 
failed: System.FormatException : Input string was not in a correct format. 
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) 
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) 
at System.Int32.Parse(String s) 

auf der Grundlage der Dokumentation bei Throws Constraint (NUnit 2.5)

+1

Sie können dies auch tun: 'Assert.Throws (() => Int32.Parse (" abc "));' – Jaider

+0

Ich habe versucht, mit der Assert.That Stil für dieses Projekt zu bleiben. Ich bin nicht so daran interessiert wie früher. –

Antwort

52

Versuchen Sie stattdessen:

Assert.That(() => Int32.Parse("abc"), Throws.Exception.TypeOf<FormatException>()); 

Grundsätzlich müssen Sie einen Delegaten Assert.That passieren, genau wie die Dokumentation in Ihrer Verbindungszustände (beachten Sie, dass Ich habe hier einen Lambda-Ausdruck verwendet, aber es sollte der gleiche sein).

+1

ah musste ich in einem anonymen Delegat machen ... Ich sehe das In der Dokumentation war es jetzt einfach nicht klar. Vielen Dank! –

+3

Wenn jemand auf die Tatsache stößt, dass ihre anonyme Funktion void zurückgibt, müssen Sie Folgendes tun: 'Assert.That (new Action (() => VoidReturningMethod (" abc ")), Throws.Exception.TypeOf ()); ' –

+0

Dank @MartinNeal, die mir auf dem richtigen Weg geholfen haben, aber für mich beschwerte es sich, dass es ein TestDelegate sein musste, also musste ich tun:' new TestDelegate (() => AddBlockingTaskToBox()) ' oder – Brondahl

8

Welche Testläufer verwenden Sie? Nicht alle von ihnen funktionieren ordnungsgemäß mit den Ausnahmeerklärungen.

Sie haben mehr Glück mit [ExpectedException (typeof(FormatException))] oder sogar Assert.Throws<FormatException> (() => Int32.Parse("abc"));

+0

Ich benutzte TDD.net und nUnit gui. Ihr Fix hat funktioniert, aber ich möchte die fließende Syntax verwenden. Ich habe dir jedoch einen Punkt für die Hilfe gegeben! –

+0

Ich weiß, das ist eine alte Antwort, die in diesem Moment richtig war. Aber für jetzt und zukünftige Referenz, ExpectedException Attribut ist veraltet auf NUnit 3.0: https://github.com/nunit/docs/wiki/Breaking-Changes – ferpega

Verwandte Themen