Java单元测试JUnit

文章目录

前言

博主介绍:✌目前全网粉丝4W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。

涵盖技术内容:Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。

博主所有博客文件目录索引:博客目录索引(持续更新)

CSDN搜索:长路

视频平台:b站-Coder长路

一、JUnit描述(引入Maven)

JUnit是一种Java语言的单元测试框架,它是最流行的单元测试框架之一。它提供了一些可用于编写和运行测试的API,并且可以生成测试报告。JUnit适用于所有Java语言的项目,例如Java应用程序、Java Servlet、Java EE应用程序以及Android应用程序等。

依赖版本

plain 复制代码
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>

二、基本API+注解

2.1、Assert类

Assert是JUnit框架提供的一个断言类,用于验证测试结果和预期结果是否相符。我们可以使用Assert类来编写断言代码,从而保证测试的正确性和可靠性。

  • assertEquals(expected, actual):验证两个值是否相等,如果不相等则抛出AssertionError异常。
  • assertNotEquals(expected, actual):验证两个值是否不相等,如果相等则抛出AssertionError异常。
  • assertTrue(condition):验证给定的条件是否为true,如果不是则抛出AssertionError异常。
  • assertFalse(condition):验证给定的条件是否为false,如果不是则抛出AssertionError异常。
  • assertNull(object):验证给定对象是否为空(null),如果不为空则抛出AssertionError异常。
  • assertNotNull(object):验证给定对象是否不为空(null),如果为空则抛出AssertionError异常。
  • assertArrayEquals(expected, actual):验证两个数组是否相等,如果不相等则抛出AssertionError异常。
  • assertSame(expected, actual):验证两个对象是否相等,如果不相等则抛出AssertionError异常。
  • assertNotSame(notExpected, actual):验证两个对象是否不相等,如果相等则抛出AssertionError异常。

断言方法的第一个参数通常是预期值(expected),而第二个参数则是实际值(actual)。


2.2、JUnit注解

所有的注解如下:

  • @Test:这是JUnit最重要的注解之一,它被用来标记测试方法。JUnit会执行所有带有@Test注解的方法,以验证代码的正确性。
  • @Before:在每个测试方法执行之前 该注解所标注的方法会被执行。通常,这个注解可以用于初始化测试数据和资源。
  • @After:在每个测试方法执行之后 该注解所标注的方法会被执行。通常,这个注解可以用于清理测试数据和资源。
  • @BeforeClass:在整个测试类中只执行一次,在执行测试用例之前该注解所标注的方法会被执行,且这个方法必须是静态方法,也就是这个方法会在类加载时执行。通常,这个注解可以用于初始化静态数据和资源。
  • @AfterClass:在整个测试类中只执行一次,在执行测试用例之后该注解所标注的方法会被执行,同样,这个方法必须是静态方法。通常,这个注解可以用于清理静态数据和资源。
  • @Ignore:该注解表示忽略某个测试方法,不会执行该方法。通常,这个注解可以用于临时禁用某个测试用例。
  • @RunWith:该注解定义测试运行器,JUnit默认使用BlockJUnit4ClassRunner作为测试运行器。如果需要使用其他运行器,可以在注解中指定。【一般配合springboot】
  • @Parameters:该注解可以用于动态参数化测试方法,使测试方法能够接受不同的输入参数。
  • @Rule:该注解定义测试规则(Test Rule),可以在测试方法执行前后实施某些操作,如超时控制、异常检测等。
  • @ClassRule:类似于@Rule,但是粒度更大,可以对整个测试类进行规则控制。

三、普通单元测试

3.1、BeforeClass、AfterClass、Before、After、Test合集测试

说明:主要研究下所有单元测试注解的生命周期。

  • BeforeClass、AfterClass:整个完整测试过程中各自只执行一次。【类级别】
  • Before、After:对于每一个Test方法都会提前或最终执行一次。【方法级】
plain 复制代码
package com.changlu;
import org.junit.*;


public class MainTest {

    @BeforeClass
    public static void beforeClass() {
        System.out.println("BeforeClass");
    }

    @AfterClass
    public static void afterClass() {
        System.out.println("afterClass");
    }

    @Before
    public void before() {
        System.out.println("-----------");
        System.out.println("before");
    }

    @After
    public void After() {
        System.out.println("After");
        System.out.println("-----------");
    }

    @Test
    public void testCon1() {
        //断言验证为true,测试通过
        Assert.assertTrue(true);
        System.out.println("testCon1");
    }

    @Test
    public void testCon2() {
        //断言验证为true,测试通过
        Assert.assertTrue(true);
        System.out.println("testCon2");
    }
}

运行结果:


四、SpringBoot单元测试

4.1、SpringBoot集成Junit介绍

Springboot集成JUnit写单元测试类需要使用RunWith注解,这个注解需要一个值,测试运行器。

测试运行器(Test Runner)是JUnit框架提供的一个核心组件,用于执行测试类中的测试方法并生成测试报告。JUnit提供了多个测试运行器,不同的运行器可以根据不同的需求来选择使用。

  • JUnit4:JUnit4是JUnit框架的主流版本,支持使用注解方式进行测试。我们一般会选择使用@RunWith(JUnit4.class)运行器来执行测试用例。
  • SpringRunner:SpringRunner是Spring Boot Test框架中提供的测试运行器,用于执行集成测试和端到端测试等。可以使用@RunWith(SpringRunner.class)运行器来启动Spring Boot上下文环境,并进行测试。
  • Parameterized:Parameterized是JUnit提供的一个参数化测试运行器,可以让我们在单元测试中重复运行相同的测试方法,并对方法参数进行变量化处理。
  • Theories:Theories是JUnit提供的一个更加高级的参数化测试运行器,可以生成随机数据、枚举值、自定义输入等多种方式来测试方法的正确性。
  • Suite:Suite运行器可以将多个测试类组合成一组测试用例,方便批量执行和管理测试用例。

4.2、实战:SpringBoot项目添加功能测试类

引入JUnit依赖:

plain 复制代码
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>
plain 复制代码
import com.team.order.FoodOrderSpringBootApplication;
import com.team.order.service.CaipinService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

/**
 * @description  创建测试类单元测试
 * @date 2024/4/19 15:33
 */
@SpringBootTest(classes = FoodOrderSpringBootApplication.class)
@RunWith(SpringRunner.class)
public class MainTest {

    @Autowired
    private CaipinService caipinService;

    @Test
    public void testCaipin() {
        System.out.println(caipinService.selectList(null));
    }

}

运行结果如下:


参考文章

1\]. JUnit单元测试:https://blog.csdn.net/weixin_44084024/article/details/130204119 \[2\]. 【SpringBoot应用篇】SpringBoot集成JUnit单元测试:https://blog.csdn.net/qq_45297578/article/details/118935974 ## 资料获取 大家点赞、收藏、关注、评论啦\~ 精彩专栏推荐订阅:在下方专栏👇🏻 * [长路-文章目录汇总(算法、后端Java、前端、运维技术导航)](https://blog.csdn.net/cl939974883/category_11568291.html?spm=1001.2014.3001.5482):博主所有博客导航索引汇总 * [开源项目Studio-Vue---校园工作室管理系统(含前后台,SpringBoot+Vue)](https://changlu.blog.csdn.net/article/details/125295334):博主个人独立项目,包含详细部署上线视频,已开源 * [学习与生活-专栏](https://blog.csdn.net/cl939974883/category_10700595.html):可以了解博主的学习历程 * [算法专栏](https://blog.csdn.net/cl939974883/category_11403550.html?spm=1001.2014.3001.5482):算法收录 更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅

相关推荐
laoliu19964 小时前
GGE Lua 详细教程
开发语言·junit·lua
chao_78918 小时前
pytest 实战演练【pytest】
自动化测试·单元测试·自动化·pytest
机器滴小白1 天前
事务管理——@Transactional
java·开发语言·注解
你的人类朋友2 天前
【✈️速通】什么是SIT,什么是UAT?
后端·单元测试·测试
嵌入式-老费2 天前
LVGL应用和部署(用lua做测试)
单元测试
Hello.Reader2 天前
Redis性能基准测试
数据库·redis·junit
_GR2 天前
一篇博客学习Lua_安装使用+语法详解
开发语言·junit·lua
Code季风3 天前
测试驱动开发(TDD)实战:在 Spring 框架实现中践行 “红 - 绿 - 重构“ 循环
java·驱动开发·后端·spring·设计模式·springboot·tdd
梁辰兴3 天前
企业培训笔记:宠物信息管理--实现宠物信息分页查询
笔记·elementui·mybatis·vue3·springboot·宠物