Junit ist ein Regressionstest -Framework von Erich Gamma und Kent Beck. Junit -Test ist ein Programmierer -Test, d. H. Ein weißer Box -Test. Die Projekt -Homepage: http://www.junit.org/
Bei Verwendung von JUNIT schreiben Sie hauptsächlich Testfälle, indem Sie die Kategorie TestCase erben und den Namen testxxx () verwenden, um Unit -Tests zu schreiben.
Es gibt drei Dinge, die wirklich Tests mit Junit schreiben müssen:
1. Eine Import -Erklärung führt alle Klassen unter jungit.framework ein.*.
2. Eine Erweiterungsanweisung ermöglicht es Ihrer Klasse, von TestCase aus zu erben.
3. Ein Konstruktor, der Super (String) nennt.
Funktionales Mathtool
Paket com.zj.c01; öffentliche Klasse Mathtool {public static int gcd (int num1, int num2) {int r = 0; while (num2! = 0) {r = num1 % num2; Num1 = Num2; Num2 = R; } return num1; }}Testklasse MathtoolTest
Paket com.zj.c01; Import junit.framework.TestCase; public class mathToolTest erweitert testCase {public mathToolTest (String name) {Super (name); } public void testgcd () {assertEquals (5, mathtool.gcd (10, 5)); }} Wenn wir JUNIT verwenden, um Ausnahmen zu testen, besteht der einfachste Weg, über den Versuch nachzudenken, um die Ausnahme zu fangen. Wir müssen die folgenden Bedingungen geltend machen:
1. Ausnahme, die tatsächlich ausgelöst wird. Überprüfen Sie im Allgemeinen die Bestimmung der im Nachrichtenattribut der Ausnahme enthaltenen Zeichenfolge. Sie können also den gemeinsamen Code wie diesen schreiben:
@Test public void testbizexception () {try {password.validate ("123"); scheitern ("keine Ausnahme geworfen."); } catch (Ausnahme ex) {assertTrue (ex instanceof bizexception); AssertRue (ex.getMessage (). Enthält ("Fehler")); }} Die hier getestete Methode ist, ob das password.Validate () -Methode die entsprechende Ausnahme ausgelöst hat. Bitte beachten Sie, dass hier nicht fehlgeschlagen ist ("Keine Ausnahme.") Im Versuch wird hier nicht übersehen.
Codestlinie, sonst, wenn die getestete Methode keine Ausnahme ausführt, wird dieser Anwendungsfall verabschiedet, und Sie erwarten eine Ausnahme.
In Junit 4 müssen keine solchen Methodenausnahmen getestet werden. Dies kann zwar auch feststellen, ob die erwartete Ausnahme ausgeführt wird, hat jedoch immer noch Nachteile. Sie werden es wissen, nachdem Sie es verglichen haben. Junit kann Ihnen nicht den detaillierten Grund für das Behauptungsversagen in der Methode für Versuche anzeigen.
Schauen wir uns also an, wie Sie Ausnahmen seit Junit 4 testen können? Verwenden Sie einfach @test (ausgeführt = exception.class) Annotation, siehe folgenden Code:
@Test (erwartet = bizexception.class) public void testbizexception () {password.validate (null); }
Wenn die getestete Methode den Bizexception -Typ geworfen hat, ist die Behauptung erfolgreich. Übrigens kann @Test (erwartet = bizexception.class) nur den Typ der Ausnahme bestimmen, und es gibt keine entsprechende Annotation, um spezifischere Informationen über die Ausnahme zu gründen, dh das Nachrichtenattribut der geworfenen Ausnahme nicht bestimmen kann.
Dann werfen wir manchmal eine Ausnahme eines Typs in einer Methode mehrmals, aber die Gründe sind unterschiedlich, dh die Nachrichteninformationen der Ausnahme sind unterschiedlich. Wenn beispielsweise eine bizexception auftritt, gibt es die folgenden zwei Ausnahmen:
Neue bizexception ("Passwort muss mindestens 6 Buchstaben enthalten.") Neue Bizexception ("Kennwortlänge weniger als 15 Buchstaben") Dies erfordert eine Möglichkeit, Ausnahmenachricht zu übernehmen. Aus diesem Grund haben wir seit Junit 4.7 eine perfektere Wahl getroffen, was der folgende Code ist:
@Rule public erwartetexception erwartetex = erwartetexception.none (); @Test public void testbizexception () löscht InvalidPasswordException {wedex.exect (bizexception.class); erwartetex.exectMessage ("erforderlich"); Password.Validate (""); } Der obige Code muss auf:
1. @Rule Annotated erwartungsgemäße Variable Deklaration, es muss öffentlich sein
2. Bei @Test kann es nicht als @test (erwartet = bizexception.class) geschrieben werden, sonst kann es nicht korrekt getestet werden. Das heißt, die @Test (erwartete = bizexception.class) und die methode upwedEx.exepepexxx () in der Testmethode können nicht gleichzeitig koexistieren. A. 4. Eine weitere Sache ist sehr schwer, schreiben Sie die getestete Methode hinter der erwarteten EXPIPEXXX () -Methode, ansonsten die Ausnahme, die nicht korrekt getestet werden kann Wie bereits erwähnt, kann die Verwendung der Versuchs -Catch -Methode die Ausnahme auch korrekt testen. Was sind die Vorteile des Vergleichs des @test (erwarteten =…) oder @Rule und versuchen Sie es mit der Fangmethode? Offensichtlich ist die von Junit 4 empfohlene Methode prägnant und klar. Schauen wir uns an, welche Jungit Sie auffordert, wenn der Test fehlschlägt?
Die Eingabeaufforderung, die Sie erhalten, wenn der Test ungewöhnlich fehlgeschlagen ist:
Wenn es keine Ausnahme gibt:
Java.lang.AsSertionError: Keine Ausnahme geworfen. bei org.junit.assert.fail (assert.java:91) unter cc.unmi.passwordtest.passwordLengthessHan6lettersThrowsexception (PassageTest.java:20)
Wenn der Ausnahmetyp falsch ist oder die Ausnahmenachricht falsch ist:
java.lang.assertionError: at org.junit.assert.fail (assert.java:91) unter org.junit.assert.assertRue (assert.java:43) unter org.junit.assert.assertRue (Assert.java:54) unter org.junit.assert.assertRue (assert.java:54) unter org.junit.assert.assertRue (assert.java:54) unter org.junit.assert.assertRue (assert.java:54) unter org.junit.assert.assertRue (assert.java:54) unter org.junit.assert.assertRue (Assert.java:54) at org.junit.assert.assertRue (assert.java:54) unter organ. CC.unmi.Passwordtest.PasswordLengthessHan6lettersThrowsexception (passwordtest.java:22)
Die obige Hilfe für die Positionierung von Fehlern ist nicht besonders gut. Schauen Sie sich die Eingabeaufforderungen an, wenn der Test fehlschlägt, wenn @test (erwartet = bizexception.class):
Java.lang.AsSertionError: Erwartete Ausnahme: cc.test.bizexception bei org.junit.internal.runners.Statements.exectexception.Valuate (erwartetexception.java:32) at org.junit.RULES.EXPECTECEPECTEDException $Exception.exused.exused.Valatecy (Event.Valateur) (Event.
Verwenden Sie @Rules erwartungsgemäßException, um Ausnahmen zu testen. Tipps beim Ausfall:
Java.lang.AsSertionError: Erwartet: (Ausnahme mit Meldung eine Zeichenfolge, die „Ja. Erforderlich“ und eine Instanz von Java.lang.NullPointerexception) erhielt: org.junit.asserthat (assert.java:778) at org.junit.assert.assertHat (Assert.java:78) at org.junit.assert.asserthat (assert.java org.junit.rules.expectedException $ tewdexceptionStatement.
Insbesondere die @Rules erwartete Methode ist sich deutlich bewusst, warum der Test fehlgeschlagen ist. Welche Ausnahme wird erwartet, welche Zeichenfolge ist in der Ausnahmebeldung enthalten, welche Art von Ausnahme wird tatsächlich erhalten und wie lautet die Nachricht in der Ausnahme. Damit wissen Sie, wie Sie Ihr Programm beheben können, sobald Sie es sehen.