🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# JUnit5 测试生命周期 > 原文: [https://howtodoinjava.com/junit5/junit-5-test-lifecycle/](https://howtodoinjava.com/junit5/junit-5-test-lifecycle/) 在 JUnit5 中,测试生命周期由 4 个主要注解驱动,即[**`@BeforeAll`**](//howtodoinjava.com/junit-5/before-all-annotation-example/), [`@BeforeEach`](//howtodoinjava.com/junit-5/before-each-annotation-example/), [`@AfterEach`](//howtodoinjava.com/junit-5/after-each-annotation-example/)和[`@AfterAll`](//howtodoinjava.com/junit-5/after-all-annotation-example/)。 同时,每个测试方法都必须标有`@Test`注解。 尽管`@Test`注解不再使用可选参数,但它几乎没有变化。 ## 之前和之后 在**单元测试生命周期**中,您首先需要使用一些方法来设置和拆除运行测试的环境或测试数据。 在 JUnit 中,为每个测试创建一个新的测试实例。 `@BeforeAll`和`@AfterAll`注解(按名称清除)在整个测试执行周期中仅应调用一次。 因此,必须将它们声明为`static`。 如果它们是具有相同注解的多个方法(例如,两个具有`@BeforeAll`的方法),则它们的执行顺序不确定。 对于每个测试实例都调用`@BeforeEach`和`@AfterEach`,因此不必是`static`。 ```java public class AppTest { @BeforeAll static void setup(){ System.out.println("@BeforeAll executed"); } @BeforeEach void setupThis(){ System.out.println("@BeforeEach executed"); } @Test void testCalcOne() { System.out.println("======TEST ONE EXECUTED======="); Assertions.assertEquals( 4 , Calculator.add(2, 2)); } @Test void testCalcTwo() { System.out.println("======TEST TWO EXECUTED======="); Assertions.assertEquals( 6 , Calculator.add(2, 4)); } @AfterEach void tearThis(){ System.out.println("@AfterEach executed"); } @AfterAll static void tear(){ System.out.println("@AfterAll executed"); } } ``` 控制台输出: ```java @BeforeAll executed @BeforeEach executed ======TEST ONE EXECUTED======= @AfterEach executed @BeforeEach executed ======TEST TWO EXECUTED======= @AfterEach executed @AfterAll executed ``` ## 禁用测试 要在 JUnit5 中禁用测试,您将需要使用[`@Disabled`](//howtodoinjava.com/junit-5/junit-5-disabled-test-example/)注解。 它等效于 JUnit4 的`@Ignored`注解。 `@Disabled`注解可以应用于测试类(禁用该类中的所有测试方法)或单个测试方法。 ```java @Disabled @Test void testCalcTwo() { System.out.println("======TEST TWO EXECUTED======="); Assertions.assertEquals( 6 , Calculator.add(2, 4)); } ``` ## 断言 在任何测试方法中,我们都需要确定它是否通过失败。 您可以使用[断言](//howtodoinjava.com/junit-5/junit-5-assertions-examples)进行操作。 断言有助于通过测试用例的实际输出来验证期望的输出。 为简单起见,所有 JUnit Jupiter 断言都是[`org.junit.jupiter.Assertions`](http://junit.org/junit5/docs/current/api/org/junit/jupiter/api/Assertions.html)类中的静态方法。 ```java void testCase() { //Test will pass Assertions.assertEquals(4, Calculator.add(2, 2)); //Test will fail Assertions.assertEquals(3, Calculator.add(2, 2), "Calculator.add(2, 2) test failed"); //Test will fail Supplier<String> messageSupplier = ()-> "Calculator.add(2, 2) test failed"; Assertions.assertEquals(3, Calculator.add(2, 2), messageSupplier); } ``` 要使测试失败,只需使用`Assertions.fail()`方法。 ```java @Test void testCase() { Assertions.fail("not found good reason to pass"); } ``` ## 假设 [假设](//howtodoinjava.com/junit-5/junit-5-assumptions-examples)提供了静态方法来支持基于假设的条件测试执行。 假设失败会导致测试中止。 通常在没有必要继续执行给定测试方法的情况下使用假设。 在测试报告中,这些测试将被标记为通过。 假设类有两种方法:`assumeFalse()`,`assumeTrue()`。 第三种方法`assumeThat()`处于实验状态,可能会在将来的版本中得到确认。 ```java @Test void testOnDev() { System.setProperty("ENV", "DEV"); Assumptions.assumeTrue("DEV".equals(System.getProperty("ENV"))); //remainder of test will proceed } @Test void testOnProd() { System.setProperty("ENV", "PROD"); Assumptions.assumeTrue("DEV".equals(System.getProperty("ENV"))); //remainder of test will be aborted } ``` **junit 测试生命周期**的所有上述注解和类。 将我的问题放在评论部分。 学习愉快! [源码下载](https://github.com/lokeshgupta1981/Junit5Examples/tree/master/JUnit5Examples)