Spring Boot 单元测试(一)

本文介绍了如何使用SpringBoot进行单元测试,包括不依赖web模块的简单单元测试和Web应用程序的测试。通过具体示例展示了如何读取项目属性文件的值,并详细解释了使用SpringBootTest注解的不同方式来启动应用进行测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单元测试是开发人员编写的一小段代码,用于检验被测代码的一个有明确功能的小模块是否正确

  • 通常是用来判断某个类和函数的行为
  • 白盒测试
  • 开发人员是最大的收益者 
    作者: 刘欣–码农翻身

在编写单元测试的时候Spring 通常不需要介入,Spring 鼓励松耦合 、接口驱动的设计,这些都能让你很轻松的编写单元测试。

Sping 的SpringRuner可以在基于JUnit的应用程序测试里加载Spring 应用程序的上下文。Spring Boot 
除了拥有Spring的集成测试支持,还开启了自动配置和Web服务器,还提供不少实用的测试辅助工具。

Spring Framework 
的核心工作是将所有组件编制在一起,构成一个应用程序。整个过程就是读取配置说明(可以是XML,基于Java的配置,基于Groovy的配置或其他类型嗯配置), 
在应用程序上下文里初始化Bean,将Bean 注入到依赖它们的其他Bean中。

本次介绍简单的单元测试!!!

在搭建Spring Boot成功后 ,会自带一个测试类,

package com.connxun;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {

    @Test
    public void contextLoads() {
    }

}

@RunWith 的 参数是SpringRuner.class, 开启了Spring集成测试支持。 
@SpringBootTest注解是SpringBoot自1.4.0版本开始引入的一个用于测试的注解 
1. 不依赖web模块的单元测试,示例以两种方式读取项目属性文件的值 
项目application.yml配置文件内容如下:

testMsg: 成功 

这里写图片描述

  2. 测试Web应用程序

   写一个Controller测试类


修改一下程序端口:


测试类:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

public class WebTest {
    /**
     * @LocalServerPort 提供了 @Value("${local.server.port}") 的代替
     */
    @LocalServerPort
    private int port;
    @Autowired
    private TestRestTemplate restTemplate;
    private URL base;

    @Before
    public void setUp() throws Exception {
        System.out.println("测试开始====" + System.currentTimeMillis());
        String url = String.format("http://localhost:%d/", port);
        System.out.println(String.format("port is : [%d]", port));
        this.base = new URL(url);
    }

    @After
    public void setEnd() throws Exception {
        System.out.println("测试结束====" + System.currentTimeMillis());
    }

    @Test
    public void webTest_1() {
        ResponseEntity<String> response = this.restTemplate.getForEntity(
                this.base.toString() + "/test", String.class, "");
        System.out.println(String.format("response----测试结果为:%s", response.getBody()));
        ResponseEntity<String> res = this.restTemplate.getForEntity(
                "http://localhost:{port}" + "/test", String.class, port);
        System.out.println(String.format("res----测试结果为:%s", res.getBody()));

    }
}
控制台日志:


@Before  表明这个方法在测试方法之前执行。

@After      表明这个方法在测试方法之后执行。

classes = Application.class

指明启动类。

webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
@LocalServerPort

MOCK —提供一个Mock的Servlet环境,内置的Servlet容器并没有真实的启动,主要搭配使用@AutoConfigureMockMvc

RANDOM_PORT — 提供一个真实的Servlet环境,也就是说会启动内置容器,然后使用的是随机端口 
DEFINED_PORT — 这个配置也是提供一个真实的Servlet环境,使用的默认的端口,如果没有配置就是8080 
NONE — 这是个神奇的配置,跟Mock一样也不提供真实的Servlet环境。


启动随机端口,本次测试的端口是60506,两者搭配使用。会生成随机端口注入到变量中。

我用了两种绑定端口的方式。

参考:

https://blog.youkuaiyun.com/limenghua9112/article/details/79694849




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值