Wie funktioniert assumeTrue() Arbeit in JUnit
Ich bin auf der Suche nach einigen Validierung, wie Assume.assumeTrue()
arbeitet in JUnit. Ich möchte es in einer @BeforeClass
Methode, so dass ich vermeiden kann, läuft meine test-suite, wenn eine Bedingung nicht erfüllt.
Aber ich Frage mich, wie die Natur der Methode. Wenn assumeTrue
erhält einen parameter mit einem falschen Wert, oder tut es das überspringen der rest der Methode (die das kommentierte mit @BeforeClass
) oder er führt, die den restlichen Anweisungen.
Ich bin auch neugierig, von anderen Auswirkungen es haben könnte, für Methoden, annotiert mit:
@After
@Before
@AfterClass
Edit:
Nachdem Sie durch eine hübsche basic-test, wenn assumeTrue(false)
nie ausgeführt, dann wird der rest der Methode wird ignoriert, sowie alle Methoden, annotiert mit @Test
@After
oder @Before
.
Mir war es ein wenig überraschend, dass der rest der Methode übersprungen wurde, sowie die Tatsache, dass es auch ignoriert @Before
und @After
neben @Test
wenn assumeTrue
in der @BeforeClass
Methode. Die Dokumentation ist nicht angegeben, die Art von Verhalten (was ich geprüft, bevor die Frage).
Edit2: Mit assumeTrue()
im @BeforeClass
Methode ist sehr plausibel, wie kann es sein, Umwelt-Variablen (D. H. die build - /test-Maschine ist, betont, für die Ressourcen), die Sie möchten vielleicht prüfen, bevor Sie Ihren test-suite. Dies kann helfen, vermeiden, sich testen Ausfälle (wie z.B. timeouts), verursacht durch ein langsames system.
So, ich bin noch nicht sicher, warum dies ist immer downvoted so schwer...
Den test, ich lief es durch die so aussah
@BeforeClass
public static void beforeClassMethod()
{
System.out.println("BeforeClass assume");
Assume.assumeTrue(false);
System.out.println("AfterClass assume");
}
@Before
public void beforeMethod()
{
System.out.println("Before");
}
@Test
public void testMethod()
{
System.out.println("Test");
}
@After
public void afterMethod()
{
System.out.println("After");
}
@AfterClass
public static void afterClassMethod()
{
System.out.println("AfterClass");
}
Output:
BeforeClass assume
AfterClass
- Haben Sie versucht, das schreiben und ausführen eines testcase, die verwendet werden
assumeTrue()
? - junit.sourceforge.net/javadoc/org/junit/Assume.html
- Warum sind Sie der Planung bis zur Nutzung assumeTrue in der teardown-Methoden(@after, @afterclass)?
- Es wirft eine exception, also ja, es wird abgebrochen.
- Ich bin nicht, ich wusste nur nicht, wenn es auch ignoriert die teardown-Methoden oder nicht
Du musst angemeldet sein, um einen Kommentar abzugeben.
@Before, @BeforeClass
annotierten Methoden setUp-Methoden, die ich.e Methoden, die Sie verwenden, um zu konfigurieren, mock-Verhalten verwendet werden, indem Ihre Methoden testen. Dies ist nicht für den Betrieb der test-Fälle. Gleiche ist der Fall mit@After
und@AfterClass
es sollte verwendet werden, zu beschriften, abreißen, Methoden und enthält keine tests.Nun, sollten Sie davon Ausgehen.assumeTrue() in der test-Methoden(
@Test
annotation). Ja, assumeTrue(), wenn mit einem Ausdruck mit einer Auswertung zu false, wird der test halt und werden ignoriert. Überprüfen Sie docs für mehr info.P. S - Das ist vielleicht nicht die Antwort, aber es ist Ihr zu helfen, in die richtige Richtung gehen.
BEARBEITEN -
Diese Frage zu beantworten, es ist nicht weiter verwunderlich. @BeforeClass ist die erste Methode, die ausgeführt, während die Einrichtung Ihres test-Fall. Seine einem statischen setUp-Methode das ist einmal aufgerufen, um führen Sie setUp für alle Ihre Testfälle. Also, wenn Sie assumeTrue() hier, und es gibt Sie false zurück, wird eine assumptionViolationException und halte alles, was sonst noch passieren würde. Also nichts für Sie arbeitet. Macht das Sinn?
AssumeTrue
im@BeforeClass
Methode zu überprüfen, ein Zustand, bevor läuft in der test-suite. Es gibt Zeiten, wenn Sie nicht wollen, dass Ihre Testfälle, wenn eine Bedingung nicht erfülltA set of methods useful for stating assumptions about the conditions in which a test is meaningful. A failed assumption does not mean the code is broken, but that the test provides no useful information
@AfterClass
wird immer noch ausgeführt werden, wennassumeTrue(false)
ausgeführt wird. Macht es Sinn, aber der ganze Sinn der Frage war es, zu überprüfen, sein Verhalten