大家好,我是大洋。在本文中,我们讨论了JUnit5测试生命周期以及JUnit5与JUnit4的不同之处。1、测试阶段的生命周期通常,一个测试类包含多个测试方法。JUnit以生命周期的形式管理每个测试方法的执行。在注释的帮助下,测试用例的完整生命周期可分为三个阶段:设置:此阶段配置测试基础设施。JUnit提供类级设置和方法级设置。通常,像数据库连接这样的重对象是在类级别设置中创建的,而像测试对象这样的轻量对象是在方法级别设置的。测试执行:在这个阶段,主要是测试执行和断言。执行结果将以成功或失败来表示。清理:此阶段用于清理第一阶段的测试基础结构配置。和配置一样,拆解配置也分为类级别和方法级别。在JUnit5中,测试生命周期由四个主要注释驱动,即@BeforeAll、@BeforeEach、@AfterEach和@AfterAll。除此之外,每个测试方法都必须用@Test注解来标记。如图(使用drawIO绘制),在测试生命周期中,我们主要需要使用注解的方法来加载和卸载测试环境或测试数据进行测试运行。默认情况下,JUnit为每个测试方法创建一个新的测试实例。@BeforeAll和@AfterAll注解在整个测试执行周期中应该只被调用一次。所以它们必须被声明为静态的。@BeforeEach和@AfterEach为每个测试实例调用,因此它们不应该是静态的。如果有多个方法使用相同的注解进行注解(例如,两个方法使用@BeforeAll),它们的执行顺序是未定义的。要在JUnit5中禁用测试,您需要使用@Disabled注释。它等同于JUnit4的@Ignored注解。@Disabled注释可以应用于测试类(以禁用该类中的所有测试方法)或单个测试方法。上面代码:packagecn.dayangshuo.junit5.tests;importcn.dayangshuo.junit5.Calculator;importorg.junit.jupiter.api.*;/***@authorDAYANG*/publicclassLifeCycleTests{@BeforeAllstaticvoidbeforeAll(){System.out.println("@BeforeAll已执行");}@BeforeEachvoidsetupThis(){System.out.println("@BeforeEach已执行");}@Tag("DEV")@DisplayName("生命周期测试")@TestvoidtestCalcOne(){System.out.println("======测试1执行=======");Assertions.assertEquals(4,Calculator.add(2,2));}@Tag("PROD")@Disabled@TestvoidtestCalcTwo(){System.out.println("======测试2执行=======");Assertions.assertEquals(6,Calculator.add(2,4));}@AfterEachvoidtearThis(){System.out.println("@AfterEach已执行");}@AfterAllstaticvoidtear(){System.out.println("@AfterAll已执行");}}执行结果:2.JUnit5和JUnit4的注解对比两个版本的注解大部分相同,但也有一些区别如下表:FeatureJUnit4June5声明一个测试方法@Test@Test在当前类的所有测试方法之前执行@BeforeAll在当前类的所有测试方法之后执行@AfterClass@AfterAll在每个测试方法之前执行@Before@BeforeEach在每个测试方法之后执行@After@AfterEach禁用测试方法/类@Ignore@Disabled测试工厂NAN@TestFactory嵌套测试NAN@Nested标签和过滤器@Category@Tag注册自定义扩展NAN@ExtendWith接下来我们将讨论JUnit5的断言、假设、测试套件和灵活的参数化测试特性。
