首页 > 其他分享 >JUnit4单元测试介绍

JUnit4单元测试介绍

时间:2023-06-24 09:03:45浏览次数:58  
标签:Spring boot 介绍 单元测试 测试 spring 注解 JUnit4

 

什么是JUnit?

JUnit是测试框架, 它用于Java代码的单元测试。

JUnit = Java + Unit Testing

什么是JUnit4?

JUnit4是一个Java语言的单元测试框架,用于编写和执行单元测试。它是JUnit框架的第四个主要版本,并且是过去几年中最常用的版本。以下是一些关键特性和概念:

  1. 注解驱动:JUnit4使用注解来标记测试方法、测试类和测试套件。通过使用注解,可以指定测试方法的预期结果、测试的前置条件等。

  2. 测试生命周期:JUnit4为测试方法提供了生命周期管理。使用@Before和@After注解,可以在测试方法之前和之后执行特定的操作,例如初始化资源、清理状态等。

  3. 参数化测试:JUnit4支持参数化测试,可以通过使用@RunWith(Parameterized.class)注解和@Parameters注解来运行多个输入组合的测试。

  4. 断言方法:JUnit4提供了一组断言方法,用于验证代码的预期行为。例如,assertEquals()用于比较两个值是否相等,assertTrue()用于验证条件是否为真等。

  5. 异常测试:JUnit4支持异常测试,可以使用@Test(expected = Exception.class)注解来表示测试方法期望抛出指定的异常。

  6. 测试套件:JUnit4允许将多个测试类或测试方法组织成一个测试套件,并同时执行它们。

  7. 忽略测试:使用@Ignore注解,可以暂时忽略某些测试方法或测试类,以便在调试或开发期间跳过它们。

  8. 并发测试:JUnit4引入了对并发测试的支持,能够在多线程环境下进行测试。

除了以上这些特性之外,JUnit4还有其他一些功能和扩展,通过使用JUnit的插件体系,可以进一步扩展其功能。

总的来说,JUnit4是一个强大而灵活的单元测试框架,提供了丰富的功能和注解,可以帮助开发人员编写可靠、可重复、易于维护的单元测试。它已经成为Java开发中最流行的单元测试框架之一。

spring框架里如何进行单元测试?

 在Spring框架中进行单元测试时,可以使用JUnit和Spring TestContext Framework来编写和执行测试用例。以下是进行单元测试的基本步骤:
  1. 引入依赖:在项目的构建文件(如Maven或Gradle)中,添加JUnit和Spring TestContext Framework的依赖。

  2. 编写测试类:创建一个测试类,并使用@RunWith(SpringRunner.class)注解来告诉JUnit使用Spring TestContext Framework来运行测试。

  3. 配置测试环境:使用@ContextConfiguration注解指定要加载的Spring配置文件或配置类。这样可以确保在测试期间正确加载和配置Spring应用上下文。

  4. 注入依赖:使用@Autowired@Inject注解将需要测试的组件(如服务、仓库等)自动注入到测试类中。

  5. 编写测试方法:在测试类中编写测试方法,使用Junit的断言方法来验证代码的预期行为。可以使用Spring提供的@Test注解来标记测试方法。

  6. 执行测试:运行JUnit测试,验证代码的正确性和逻辑。

springboot+junit4的一个测试用户登录功能的demo

当使用Spring Boot和JUnit4来编写测试用户登录功能的Demo时,可以按照以下步骤进行:
  1. 创建一个Spring Boot项目:使用Spring Initializr或手动创建一个Spring Boot项目。

  2. 添加依赖:在项目的构建文件(如Maven或Gradle)中,添加所需的依赖,包括Spring Boot、Spring Security等。

  3. 编写用户服务和控制器:创建一个用户服务类和一个用户控制器类。用户服务类负责验证用户的登录信息,用户控制器类则处理用户登录请求。

 
// 用户服务类
@Service
public class UserService {

    public boolean login(String username, String password) {
        // 根据实际逻辑进行用户登录验证
        // 返回true表示验证通过,返回false表示验证失败
    }
}

// 用户控制器类
@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/login")
    public String login(@RequestParam String username, @RequestParam String password) {
        if (userService.login(username, password)) {
            return "登录成功";
        } else {
            return "登录失败";
        }
    }
}
  1. 编写测试类:创建一个测试类,并使用JUnit4进行测试。在测试类中,可以使用@RunWith(SpringRunner.class)@SpringBootTest注解来加载Spring应用上下文。
javaCopy Code
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserControllerTest {

    @Autowired
    private UserController userController;

    @Test
    public void testLogin() {
        String result = userController.login("username", "password");
        assertEquals("登录成功", result);
    }
}
  1. 执行测试:使用Maven或Gradle等构建工具执行测试命令,例如运行mvn test命令。

通过上述步骤,我们创建了一个包含用户服务和控制器的Spring Boot应用,并编写了相应的JUnit4测试类。在该示例中,我们测试了用户登录功能,使用断言方法assertEquals()来验证预期结果。

请注意,这只是一个简单的Demo,实际的用户登录功能可能涉及更复杂的逻辑和组件。因此,根据实际需求,你可能需要进一步添加其他测试方法或模拟对象来完成更全面的功能测试。

 

pom.xml的依赖

 
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>1.0.0</version>

    <properties>
        <java.version>1.8</java.version>
        <spring.boot.version>2.5.2</spring.boot.version>
    </properties>

    <dependencies>
        <!-- Spring Boot 核心依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring.boot.version}</version>
        </dependency>

        <!-- Spring Security 依赖(可选,用于用户登录验证) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
            <version>${spring.boot.version}</version>
        </dependency>

        <!-- JUnit 依赖 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

        <!-- Spring Boot 测试依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>${spring.boot.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- Spring Boot Maven 插件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
            </plugin>
        </plugins>
    </build>

</project>

在这个pom.xml文件中,除了Spring Boot的核心依赖外,还包含了Spring Security和JUnit的依赖。其中,spring-boot-starter-web用于构建Web应用,spring-boot-starter-security是可选的,用于用户登录验证。junit是JUnit4的核心依赖,spring-boot-starter-test是Spring Boot的测试依赖,包含了JUnit和其他测试相关的库。

标签:Spring,boot,介绍,单元测试,测试,spring,注解,JUnit4
From: https://www.cnblogs.com/shamo89/p/17500632.html

相关文章

  • spring web框架介绍
    springweb框架SpringWeb框架是一个开源的Java框架,它被广泛用于构建Web应用程序和RESTful服务。它基于经典的Spring框架,提供了一组功能强大且灵活的工具和类,用于简化Web应用程序的开发。以下是SpringWeb框架的主要特点和组件:MVC模式:SpringWeb框架采用了经......
  • spring框架里的spring context模块介绍,它和spring core有什么关联?
    springcontext模块介绍Spring框架是一个开源的Java开发框架,它提供了一系列的功能和工具,用于简化Java应用程序的开发。SpringContext模块是Spring框架的核心部分之一,它主要负责管理和协调应用程序中的对象。SpringContext模块的主要功能包括:IoC容器(Inversi......
  • phar反序列化漏洞简单介绍
    phar反序列化漏洞介绍什么是phar:phar类似于java中的jar打包phar的结构:stubphar文件标识,格式为xxx<?phpxxx;__HALT_COMPILER();?>;(头部信息)manifest压缩文件的属性等信息,以序列化存储;contents压缩文件的内容;signature签名,放在文件末尾;phar协议解析文件时,会自动触发对......
  • MariaDB 工具介绍之 mariadb-shell
    MariaDBShell是一个命令行工具,它统一了MariaDB数据库产品的故障排除和管理。MariaDBShell23.03.2于2023-05-05发布。这个版本是一个技术预览版,不应该在生产环境中使用。安装通过页面https://mariadb.com/downloads/tools/下载安装包将安装包上传至服务器后,直接进行yum安......
  • Docker原理和Dockerfile的原理介绍
    Docker原理Docker是一种容器化平台,可以在其中运行应用程序。Docker将应用程序和其依赖项打包在一个容器中,提供了一种轻量级的解决方案,可以轻松地在任何平台上运行应用程序。Docker的核心技术是Linux容器(LXC)。容器是一种虚拟化技术,允许应用程序在有限的资源下运行,同时提供了强大的隔......
  • 数据介绍
    合成数据用函数3生成的。20000个像素,是用e_t目标端元跟E_minus混合而成的。如果像素对应为1说明含有目标端元,为0说明没有目标端元。一共就4个端元。其中1个是目标。N_b包的种类2:1个正包1个负包n_tar:10个目标源num_nbags:负包数num_pbags:正包数num_points:包中的点labels:是正包和负包......
  • 机器学习基础教材-《统计学习与数据分析介绍》
    本书介绍    本入门级统计教科书主要讲解发展和培养统计思维所需的基本概念和工具。它提供了描述性,归纳性和探索性的统计方法,并指导读者完成定量数据分析的过程。在实验科学和跨学科研究中,数据分析已成为任何科学研究的组成部分。诸如判断数据的可信度,分析数据,评估所获得结果的......
  • java Condition类的详细介绍
    一、condition介绍及demoCondition是在java1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition的await()、signal()这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使用Condition,阻塞队列......
  • 导入表注入初步介绍
    目录初识PE文件格式DOSDosheaderDosStub(存根)NTHeaderSignatureFileHeaderOptionalHeaderSectionTableImportTableIMAGE_IMPORT_BY_NAME开始我们注入导入表的旅程吧初识PE文件格式DOSDosheader比较重要的有e_magic和e_lfanew两个属性。其中e_magic属性用来判断这个文......
  • redis简单介绍和使用
    redis安装"""1、官网下载:安装包或是绿色面安装2、安装并配置环境变量#官网:https://redis.io/ -下载完是源代码:c语言源码:https://redis.io/download/#redis-stack-downloads-最稳定:6.x-最新7.x#中文网:http://redis.cn/download.html -上面最新只到5.x......