mavenspring boot单元测试 使用controller 执行单元测试类
Posted syui-terra
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mavenspring boot单元测试 使用controller 执行单元测试类相关的知识,希望对你有一定的参考价值。
存在这样一个场景:
当项目启动时间过长,又没办法缩短的时候,写单元测试就是一个十分耗时的工作,
这工作不在于使用编写代码,而在于每次run junit test 都需要完整启动一次项目,白白浪费宝贵的生命。
当由于某个字段没有赋值,或者某个简单判断写错,导致需要再等个3-5分钟启动 junit test,是否会想要执行一次san check?
于是乎:
假若能使用controller来调用test类方法的话,那么在本地调试单元测试时,对于一些简单的代码修改,通过热部署,只需要重新进行一次url访问就可执行一个完整的单元测试,
无需再次启动整个项目。
正题:
1. 如何在controller访问src/test ?
2. 如何编写 ?
如何在controller访问src/test
maven项目的默认配置中, src/test目录是测试目录,不会被编译到jar中,也就是在controller调用时会报ClassNotFoundException
解决办法最好的是在pom文件中修改maven默认的测试目录,将src/test 作为正常目录使用
<build>
<!-- 将测试目录更改为其他目录 --> <testSourceDirectory>src/main/test</testSourceDirectory> </build>
需要重新maven-update。update后重新将src/test use for building path
完成后便可以成功启动项目,并可以正常访问。
如何编写
可以做一个参考:
controller,最主要内容在于使用controller时,junit的自动回滚可能不会生效,所以手动设置事务,手动触发回滚
@RestController @RequestMapping(value = "/junit", produces = "application/json;charset=utf-8") public class BcsTestController private final Logger logger = LoggerFactory.getLogger(BcsTestController.class); @Autowired private BizTest bizTest; @GetMapping("test")
@Transactional(rollbackFor = Exception.class) public void startJunit() bizTest.insertTest(); // 手动开启事务回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
测试类,即可以通过其他类访问,也可以直接执行junit,增加@Componet 或者@Service 还可以通过spring注入方式调用
@Component public class BizTest extends AbstractTest @Autowired private Biz biz; @Test public void insertTest() // 测试业务
测试抽象父类,用于直接使用junit测试时的配置
@RunWith(SpringRunner.class) @SpringBootTest(classes = JltBcsWebApplication.class) @Transactional // @Rollback(false) public abstract class AbstractTest protected final Logger logger = LoggerFactory.getLogger(AbstractTest.class); protected void println(Object object) System.out.println(object);
以上是关于mavenspring boot单元测试 使用controller 执行单元测试类的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 上通过 Maven spring-boot:build-image 构建 docker 映像时如何定义架构 arm64?