如何使用JUnit5中的@BeforeAll和@AfterAll

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