2009-03-10 5 views
3

Ich mag Ausnahme implementieren (wie in JUnit 4) Überprüfung mit JUnit 3. Zum Beispiel würde Ich mag Lage sein, dies zu schreiben Tests wie:Wie passt man das Ausnahmebehandlungsverhalten in JUnit 3 an?

public void testMyExceptionThrown() throws Exception { 
    shouldThrow(MyException.class); 

    doSomethingThatMightThrowMyException(); 
} 

Dies gelingen soll, wenn und nur wenn ein MyException ist geworfen. Es gibt die ExceptionTestCase-Klasse in JUnit, aber ich möchte etwas, das jede test * -Methode verwenden oder nicht verwenden kann. Was ist der beste Weg, dies zu erreichen?

Antwort

9

Würde die Lösung:

public void testMyExceptionThrown() throws Exception { 
    try { 
     doSomethingThatMightThrowMyException(); 
     fail("Expected Exception MyException"); 
    } catch(MyException e) { 
     // do nothing, it's OK 
    } 
} 

geeignet sein für das, was Sie jetzt denken?

Werfen Sie auch einen Blick auf this thread, wo jemand eine Proxy-Lösung für JUnit3 erstellt, die eine andere Möglichkeit scheint, Ihr Problem zu lösen.

1

Der einfachste Ansatz besteht darin, das Idiom Execute Around zu verwenden, um den try-catch, den Sie normalerweise schreiben würden, wegzuspalten.

Anspruchsvoller ist zu beachten, dass TestCase nur ein Test ist. Ich vergesse die Details, aber wir können die Ausführung des Tests überschreiben (die das Framework anfänglich durch run(TestResult) spezifiziert in Test) aufruft. In dieser Überschreibung können wir den try-catch platzieren, wie in Execute Around. Die Methode testXxx sollte eine set-Methode aufrufen, um den erwarteten Ausnahmetyp zu installieren.

2

Sie müssen keine eigene Lösung implementieren, da bereits eine mit JUnit3 (und jedem anderen Testframework) verwendet werden kann: catch-exception.

Verwandte Themen