springboot 集成junit进行单元测试

您所在的位置:网站首页 匹克极态30 springboot 集成junit进行单元测试

springboot 集成junit进行单元测试

2023-02-26 00:38| 来源: 网络整理| 查看: 265

为接口编写单元测试是一个非常好的习惯,使用junit能够快速加载spring中指定模块,而不需要将工程整个启动

spiringboot中只需要引入spring-boot-starter-test依赖即可以集成junit4 因为有依赖传递

image.png

引入maven依赖

org.springframework.boot spring-boot-starter-test test 简单使用

这个例子实现了依赖注入,对userService.list()方法进行测试

需要在类上添加@RunWith(SpringRunner.class)和@SpringBootTest注解 在需要进行单元测试的方法上加上@Test即可 junit环境能够像正式环境一样,使用@Resource注解进行依赖注入 package com.springboot.study.demo1; import com.springboot.study.demo1.entity.User; import com.springboot.study.demo1.service.UserService; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.annotation.Resource; import java.util.List; /** *@program: springboot_study *@author: yinkai *@create: 2020-02-29 14:23 */ @RunWith(SpringRunner.class) @SpringBootTest public class Test { @Resource UserService userService; @org.junit.Test public void test(){ List list = userService.list(); System.out.println(list); } } 单元测试对事务的影响

如果在使用了@Transactional注解,那么在单元测试中的事务默认回滚。需要在方法上添加 @Rollback(value=false) 才会提交事务。 在测试中,处于对数据库的保护考虑,请使用@Rollback(value=true) 显式的回滚

image.png package com.springboot.study.demo1; import com.springboot.study.demo1.entity.User; import com.springboot.study.demo1.service.UserService; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; /** *@program: springboot_study *@author: yinkai *@create: 2020-02-29 14:23 */ @RunWith(SpringRunner.class) @SpringBootTest @Transactional public class Test { @Resource UserService userService; @Transactional @org.junit.Test public void test(){ List list = userService.list(); for (User user : list) { //所有user的age字段加1 user.setAge(user.getAge()+1); } //保存 userService.saveOrUpdateBatch(list); } } image.png image.png

在添加事务注解的情况下事务默认回滚!

使用@Rollback(value=false)

@Rollback(value=false) @Transactional @org.junit.Test public void test(){ List list = userService.list(); for (User user : list) { //所有user的age字段加1 user.setAge(user.getAge()+1); } //保存 userService.saveOrUpdateBatch(list); }

执行结果,事务提交!

image.png image.png 注意一个问题

在junit4中执行多线程代码,可能springboot会在主线程直接退出后直接将所有的线程强制退出,而且无任何报错信息。所以需要使用countDownLatch将主线程await(),避免因为主线程退出而整个程序退出!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3