当前位置: 首页 > article >正文

SpringBoot3与JUnit5集成测试

你可以在 Spring Boot 3 中轻松设置和运行 JUnit 集成测试。合理使用 Spring 提供的注解和工具,可以确保测试的高效性和可靠性。以下是集成测试的步骤和示例:

1. 添加依赖

pom.xml 中添加 Spring Boot Starter Test 依赖,它包含 JUnit 5 和其他测试工具。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

2. 创建测试类

src/test/java 目录下创建测试类,使用 @SpringBootTest 注解来加载应用上下文。

示例

假设有一个简单的控制器:

 
@RestController
@RequestMapping("/api")
public class MyController {

    @GetMapping("/greet")
    public String greet() {
        return "Hello, https://zhengkai.blog.csdn.net/";
    }

}

创建一个集成测试类:

 
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MyControllerIntegrationTest {

    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    public void testGreet() {
        ResponseEntity<String> response = restTemplate.getForEntity("/api/greet", String.class);
        
        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
        assertThat(response.getBody()).isEqualTo("Hello, https://zhengkai.blog.csdn.net/");
    }
}

3. 测试配置

  • @SpringBootTest:加载整个应用程序上下文。webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT 用于启动嵌入式服务器以进行 HTTP 测试。
  • TestRestTemplate:用于发送 HTTP 请求,测试 RESTful API。

4. 运行测试

使用 IDE(如 IntelliJ IDEA 或 Eclipse)中的测试功能,或使用 Maven 命令行运行测试:

mvn test

5. 使用 MockBean

可以使用 @MockBean 模拟 Spring Bean,以便在测试中控制依赖的行为。

示例

假设有一个服务类:

 
@Service
public class MyService {
    public String getMessage() {
        return "Service message";
    }
}

在测试中模拟这个服务:

 
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MyControllerIntegrationTest {

    @Autowired
    private TestRestTemplate restTemplate;

    @MockBean
    private MyService myService;

    @Test
    public void testGreet() {
        Mockito.when(myService.getMessage()).thenReturn("Mocked message");

        ResponseEntity<String> response = restTemplate.getForEntity("/api/greet", String.class);

        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
        assertThat(response.getBody()).isEqualTo("Mocked message");
    }
}

6. 使用 @DataJpaTest 进行 JPA 测试

如果需要测试 JPA 实体和 Repository,可以使用 @DataJpaTest

示例
 
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;

import static org.assertj.core.api.Assertions.assertThat;

@DataJpaTest
public class MyRepositoryTest {

    @Autowired
    private MyRepository myRepository;

    @Test
    public void testSaveAndFind() {
        MyEntity entity = new MyEntity();
        entity.setName("Test");

        myRepository.save(entity);

        MyEntity found = myRepository.findById(entity.getId()).orElse(null);
        assertThat(found).isNotNull();
        assertThat(found.getName()).isEqualTo("Test");
    }
}


http://www.kler.cn/a/411978.html

相关文章:

  • JVM类加载和垃圾回收算法详解
  • CentOS7卸载node
  • 【测试工具JMeter篇】JMeter性能测试入门级教程(一)出炉,测试君请各位收藏了!!!
  • Matlab 深度学习 PINN测试与学习
  • React 组件生命周期
  • 【JUC-Interrupt】中断相关概念
  • 100个python经典面试题详解(新版)
  • solr 远程命令执行 (CVE-2019-17558)
  • Cesium教程04_旋转模型
  • 每日刷题之优选算法(滑动窗口)
  • kali安装及使用docker和docker-compose
  • Go语言switch语句
  • 设计理念与数据反馈:面向火星熔岩管探索的跳跃机器人
  • Nodemailer使用教程:在Node.js中发送电子邮件
  • anaconda pycharm 使用问题
  • Python脚本检测网站是否开启浏览器缓存配置
  • FastDFS基础概述与系统架构详解
  • GitLab CI 配置
  • 深入浅出 WebSocket:构建实时数据大屏的高级实践
  • AdaPipe:通过自适应重新计算和细粒度的计算单元划分
  • Linux KASLR
  • DAMODEL丹摩|丹摩平台:AI时代的开发者福音
  • 微信小程序+Vant-自定义选择器组件(多选
  • 【Zookeeper 和 Kafka】为什么 Zookeeper 不用域名?
  • 权限的相关内容
  • 昇思MindSpore第六课---Roberta Prompt Turning