Junit5详解

Junit5是当前最新的测试框架。在junit5当中,一些之前使用的注解和测试方法被新的注解替换掉了。 使用junit5的测试结构如下:

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
 
import com.howtodoinjava.junit5.examples.Calculator;
 
public class AppTest {
     
    @BeforeAll
    static void setup(){
        System.out.println("@BeforeAll executed");
    }
     
    @BeforeEach
    void setupThis(){
        System.out.println("@BeforeEach executed");
    }
     
    @Tag("DEV")
    @Test
    void testCalcOne() 
    {
        System.out.println("======TEST ONE EXECUTED=======");
        Assertions.assertEquals( 4 , Calculator.add(2, 2));
    }
     
    @Tag("PROD")
    @Disabled
    @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");
    }
}

主要有下面这些注解:@BeforeAll, @BeforeEach, @AfterAll, @AfterEach

@BeforeAll

JUnit 5 @BeforeAll注释是JUnit 4中@BeforeClass注释的替代。它用于表示应在当前测试类中的所有测试方法之前执行的带的方法。

@BeforeAll注释的方法必须是静态方法,否则会报运行时错误。

@BeforeEach

JUnit 5 @BeforeEach注释替代了JUnit 4中的@Before注释。被注释的方法会在当前类中的每个Test方法之前执行。也就是说有多少个test这个方法就会执行多少次

@BeforeEach注释的方法一定不能是静态方法,否则会报发运行时错误。

@AfterEach

JUnit 5 @AfterEach注释是JUnit 4中@After注释的替换。它用于表示应在当前类中的每个@Test方法之后执行带注释的方法。

@AfterAll

JUnit 5 @AfterAll注释是JUnit 4中@AfterClass注释的替换。它用于表示应在当前测试类中的所有测试之后执行带注释的方法。

@AfterAll注释的方法必须是静态方法,否则会报运行时错误。

junit5当中使用 @BeforeEach 替换了 @Before 使用 @AfterEach替换了 @After

@BeforeAll和@AfterAll用于非static方法的场景

在写测试尤其是基于spring boot的integration test的时候,我们常常需要通过注入的方式来初始化一些对象,当我们又想把这些对象在测试之前初始化时,就会发现对于注入的对象,只能将其放在非static的方法当中,根本原因在于spring的依赖注入实现原理。

但是将@beforeAll和@AfterAll放在非static方法上的时候却会报错。

为此,我们可以使用@TestInstance注解配置测试的生命周期。 如果我们不在测试类中声明它,则默认情况下,生命周期模式将为PER_METHOD。 因此,为了防止我们的测试类抛出JUnitException,我们可以使用@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);
    }
}

这样我们的测试就可以运行成功了。

@Disabled可以用于不运行某些test的场景。@Tag可以用于将测试分类。在这里不做展开

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要配置JUnit在IntelliJ IDEA中,可以按照以下步骤进行操作: 1. 首先,确保你已经在IDEA中创建了一个Java项目。 2. 接下来,点击菜单栏的"File",然后选择"Project Structure"。 3. 在弹出的窗口中,选择"Modules"选项卡,并确保你的项目模块被选中。 4. 在右侧的面板中,选择"Dependencies"选项卡,并点击左上角的"+"按钮。 5. 在弹出的菜单中,选择"Library",然后选择"JUnit"。 6. 如果你已经下载了JUnit的jar文件,可以选择"From Maven"选项,然后在搜索框中输入"junit"进行搜索,并选择合适的版本进行导入。 7. 如果你还没有下载JUnit,可以选择"New Library"选项,然后手动下载并导入JUnit的jar文件。 8. 点击"OK"按钮完成配置。 如果你遇到了配置问题,可以参考引用和引用提供的方法进行配置。如果配置不成功,还可以尝试引用提供的最暴力的解决办法,即先写测试代码并使用@Test注解,IDE会报错并提示你导入相关的JUnit环境,你只需要选择刚才下载的JUnit版本进行导入即可。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [用IDEA时的JUnit配置过程](https://blog.csdn.net/tangodope/article/details/125126483)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [详解IDEA JUnit5测试套件运行错误的问题](https://download.csdn.net/download/weixin_38629362/12744182)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值