springboot系列文章之使用单元测试

本文详细介绍了SpringBoot中Service层和Controller层的单元测试方法,包括使用Mockito模拟环境测试、真实Web环境测试,以及单元测试的事务回滚配置。通过@SpringBootTest、@WebMvcTest注解结合MockMvc进行测试,并讨论了不同存储引擎对事务回滚的影响。文章结尾提到了官方文档和其他参考资料。

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

前言

springboot提供了 spirng-boot-starter-test以供开发者使用单元测试,在引入 spring-boot-starter-test依赖后:

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

其中包含以下几个库:
- Junit ——常用的单元测试库
- Spring Test & Spring Boot Test ——对Spring应用的集成测试支持
- AssertJ——一个断言库
- Hamcrest—— 一个匹配对象的库
- Mockito—— 一个Java模拟框架
- JSONassert—— 一个针对JSON的断言库
- JsonPath—— 用于JSON的XPath

下面我们将从Service层和Controller层的角度来简单介绍下单元测试

Service单元测试

在SpringBoot 2.0中,创建一个Service的单元测试,代码如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceImplTest {
   
    @Autowired
    private UserService userService;
    @Test
    public void insertUser() {
        User user = new User();
        user.setUsername("li ning");
        user.setPassword("123456");
        userService.insertUser(user);
    }
}

上面的测试非常简单,主要需要注意两个注解: @RunWith@SpringBootTest

  • @RunWith: 该注解标签是Junit提供的,用来说明此测试类的运行者,这里用了SpringRunner,它实际上继承了 SpringJUnit4ClassRunner类,而 SpringJUnit4ClassRunner这个类是一个针对Junit 运行环境的自定义扩展,用来标准化在Springboot环境下Junit4.x的测试用例
  • @SpringBootTest 为 springApplication创建上下文并支持SpringBoot特性

使用@SpringBootTestwebEnvironment属性定义运行环境:
- Mock(默认): 加载WebApplicationContext 并提供模拟的web环境 Servlet环境,使用此批注时,不会启动嵌入式服务器
- RANDOM_PORT: 加载WebServerApplicationContext 并提供真实的web环境,嵌入式服务器,监听端口是随机的
- DEFINED_PORT: 加载WebServerApplicationContext并提供真实的Web环境,嵌入式服务器启动并监听定义的端口(来自 application.properties或默认端口 8080)
- NONE: 使用SpringApplication加载ApplicationContext 但不提供任何Web环境

Contr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值