一、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/n/239089.html