如何使用JUnit5中的@BeforeAll和@AfterAll
瀏覽人數:969最近更新:
- java
- junit
1.概述
在這個簡短的教程中,我們要實現與非靜態方法@BeforeAll
和@AfterAll
在註釋中提供Junit5
。
2.非靜態方法中的@BeforeAll
和@AfterAll
雖然單元測試,我們可能偶爾需要使用@BeforeAll
和@AfterAll
在非靜態設置和拆除方法-例如,在@ Nested
測試類或接口的默認方法。
讓我們用@BeforeAll
和@AfterAll
方法創建一個非靜態的測試類:
public class BeforeAndAfterAnnotationsUnitTest {
String input;
Long result;
@BeforeAll
public void setup() {
input = "77";
}
@AfterAll
public void teardown() {
input = null;
result = null;
}
@Test
public void whenConvertStringToLong_thenResultShouldBeLong() {
result = Long.valueOf(input);
Assertions.assertEquals(77l, result);
}
}
如果我們運行上面的代碼,它將引發異常:
org.junit.platform.commons.JUnitException: ...
現在讓我們看看如何避免這種情況。
3.@TestInstance
註釋
我們將使用@TestInstance
批註配置測試的生命週期。如果我們不在測試類上聲明它,則默認情況下PER_METHOD
.
因此,為了防止我們的測試類拋出JUnitException,
我們需要使用@TestInstance(TestInstance.
**Lifecycle.PER_CLASS)** .
讓我們重做測試類並添加@TestInstance(TestInstance.
Lifecycle.PER_CLASS):
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class BeforeAndAfterAnnotationsUnitTest {
String input;
Long result;
@BeforeAll
public void setup() {
input = "77";
}
@AfterAll
public void teardown() {
input = null;
result = null;
}
@Test
public void whenConvertStringToLong_thenResultShouldBeLong() {
result = Long.valueOf(input);
Assertions.assertEquals(77l, result);
}
}
在這種情況下,我們的測試運行成功。
4。結論
在這篇簡短的文章中,我們學習瞭如何在非靜態方法中@BeforeAll
和@AfterAll
首先,我們從一個簡單的非靜態示例開始,以顯示如果不包含@TestInstance
批註會發生什麼。 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
註釋了我們的測試,以防止拋出JUnitException 。
本作品係原創或者翻譯,採用《署名-非商業性使用-禁止演繹4.0國際》許可協議