一、JUnit是什麼
JUnit指的是Java單元測試框架,它有助於在開發過程中解決各種應用程序的異常,確保最終交付的代碼質量。JUnit測試用例用於驗證類的行為是否符合預期結果,確保代碼正確運行。
二、JUnit 4和JUnit 5的主要區別
1.測試引擎(Test Engines)
JUnit 4使用的測試引擎是JUnit 4.x runner。JUnit 5中,Test Runner和Test Engine被分開了。JUnit 5引入了一個全新JUnit Platform,這個新的平台可以支持多種Test Engine。這意味著有多種方式可以運行測試用例。
2.註解
在JUnit 4中,所有註解都位於org.junit包下。在JUnit 5中,JUnit Jupiter的註解都位於org.junit.jupiter.api包下。JUnit Vintage的註解都位於org.junit.vintage包下。
Preconditions and assumptions: @Before, @After, @BeforeClass, @AfterClass.
Assertions: @Test, @RepeatedTest, @ParameterizedTest, @TestFactory, @TestTemplate, @TestInstance, @Nested, @DisplayName, @BeforeEach, @AfterEach, @BeforeAll, @AfterAll, @Tag, @Disabled.
3.斷言(Assertions)
JUnit 4使用org.junit.Assert斷言類中的靜態方法進行編寫測試用例的斷言。JUnit 5中對JUnit Jupiter進行了改進,斷言不再是在Assert類上調用靜態方法,並且JUnit Jupiter支持Hamcrest和AssertJ等附加斷言庫。
例如:
@Test void testNegativeNumber() { int num = -1; assertTrue(num < 0); }
JUnit Jupiter的斷言可以選擇不止一種:
@Test void testNegativeNumber() { int num = -1; assertTrue(num 0, "The number " + num + " must not be positive"); assertEquals(-1, num); }
4.擴展(Extensions)
JUnit 5的擴展模型更加強大,它支持所有測試級別的擴展以及底層的擴展(如TestInstancePreDestroyCallback)。JUnit Jupiter的擴展API是由用於創建JUnit 5測試擴展的註解組成的。
例如:
@ExtendWith(TimingExtension.class) class TimeExecutionLoggerTest { @Test void testLogExecutionTime() { // This test can be run multiple times } }
5.數據提供者(Data Providers)
JUnit 5與JUnit 4不同,JUnit 5通過@ParamterizedTest註解支持參數化測試,以及通過@ValueSource、@EnumSource、@CsvSource、@CsvFileSource、@MethodSource、@ArgumentsSource等提供了更多方式為測試用例提供參數。JUnit 4向用戶提供了JUnitParams庫來進行一些參數化測試,但是需要另外下載安裝,而JUnit 5將它集成在框架中。
例如:
@ParameterizedTest @ValueSource(ints = { 1, 2, 3 }) void testWithValueSource(int argument) { assertNotNull(argument); }
6.測試實例生命周期(Test Instance Lifecycle)
JUnit 5為測試實例引入了生命周期,並用@TestInstance註解表示。@TestInstance註解被用來標註單元測試類中@Test方法和@TestFactory方法之上或是整個測試類上,作為指定測試類作為新建實例或單例模式的標識。
例如:
@TestInstance(TestInstance.Lifecycle.PER_CLASS) class MyTestClass { private int sum = 0; @Test void testSum() { sum = sum + 1; assertEquals(1, sum); } @Test void testSum2() { sum = sum + 1; assertEquals(2, sum); } }
三、總結
JUnit 5與JUnit 4相比,具有更多的新特性,支持多種運行引擎,更加靈活的擴展支持,參數化測試和添加了測試實例生命周期等特性。可以根據需要選擇使用JUnit 4或者JUnit 5中的特性,來達到更好的測試效果。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/239089.html