java - write - mockito rule




Wie funktioniert Junit @Rule? (3)

Ich fand, dass dieser Artikel @Rule ziemlich gut erklärt, vor allem den letzten Abschnitt "Die Reihenfolge der Ereignisse im Detail"

Ich möchte Testfälle für einen Großteil des Codes schreiben. Ich würde gerne Details zur JUnit @Rule Annotationsfunktion wissen, damit ich sie zum Schreiben von Testfällen verwenden kann. Bitte geben Sie einige gute Antworten oder Links an, die anhand eines einfachen Beispiels eine detaillierte Beschreibung ihrer Funktionalität geben.


Junit Rules arbeiten nach dem Prinzip der AOP (aspect oriented programming). Es fängt das Testverfahren ab und bietet somit die Möglichkeit, einige Dinge vor oder nach der Ausführung eines bestimmten Testverfahrens zu erledigen.

Nehmen Sie das Beispiel des folgenden Codes:

public class JunitRuleTest {

  @Rule
  public TemporaryFolder tempFolder = new TemporaryFolder();

  @Test
  public void testRule() throws IOException {
    File newFolder = tempFolder.newFolder("Temp Folder");
    assertTrue(newFolder.exists());
  }
} 

Jedes Mal, wenn die obige Testmethode ausgeführt wird, wird ein temporärer Ordner erstellt, der nach der Ausführung der Methode gelöscht wird. Dies ist ein Beispiel für eine Out-of-Box-Regel, die von Junit bereitgestellt wird.

Ein ähnliches Verhalten kann auch durch Erstellen eigener Regeln erreicht werden. Junit bietet die TestRule-Schnittstelle, die implementiert werden kann, um unsere eigene Junit-Regel zu erstellen.

Hier sind einige nützliche Links als Referenz:


tl; dr für die Funktionsweise: JUnit umschließt die Testmethode in einem Statement-Objekt, so dass statement.Execute () den Test ausführt. Anstatt Statement.Execute () direkt aufzurufen, um den Test auszuführen, übergibt JUnit die Anweisung an eine TestRule mit der Annotation @Rule. Die "Anwenden" -Funktion der TestRule gibt eine neue Anweisung zurück, wenn die Anweisung mit Ihrem Test übereinstimmt. Die Execute () -Methode der neuen Anweisung kann die execute-Methode der test-Anweisung aufrufen (oder nicht, oder sie wird mehrmals aufgerufen) und alles, was sie will, vor und nachher ausführen. Jetzt hat JUnit eine neue Anweisung, die mehr als nur den Test ausführt, und es kann diese wiederum an weitere Regeln übergeben, bevor schließlich Execute aufgerufen wird.







junit-rule