java 单元测试_在springboot中写单元测试解决依赖注入和执行后事务回滚问题
往期文章
「Java并发编程」谈谈Java中的内存模型JMM
面试官:说说你知道多少种线程池拒绝策略
为什么不要在MySQL中使用UTF-8编码方式
前言
很多公司都有写单元测试的硬性要求,在提交代码的时候,如果单测通不过或者说单元测试各种覆盖率不达标,会被拒绝合并代码。写单元测试,也是保证代码质量的一种方式。
junit单元测试
相信绝大多数的Java开发者都用过Junit来写单元测试。
引入依赖:
junit junit 4.12
直接在方法上加上@Test注解即可:
加了@Test注解,就会有一个运行的图标了。
spring的依赖问题
现在的Java开发,基本上离不开spring了。但是使用spring,写单测的时候就会存在一个依赖注入的问题。
假设有如下一个Service:
@Servicepublic class TestService { public String getString() { return "Hello World!"; }}
在Junit中直接自动装配:
public class JunitTest { @Autowired private TestService testService; @Test public void test() { System.out.println(testService.getString()); }}
运行报错:
springboot写单元测试
在springboot中,解决spring依赖问题,非常的简单。只需要它提供的几个注解即可:
引入依赖:
org.springframework.boot spring-boot-starter-test test
这里引入了一个spring-boot-starter-test依赖,是springboot中写单测所需要的。
在单元测试类上添加@RunWith(SpringRunner.class)、@SpringBootTest注解:
这时候就可以正常的把spring依赖注入进来了,运行方法,可以看到springboot启动时的输出:
如果是通过spring initialize创建的springboot项目(本系列第一篇文章有讲解),其实会自动创建一个单元测试类:
我们在写单元测试的时候,直接继承这个类即可。
单元测试事务回滚
写单元测试,难免需要操作数据库。有时候单元测试的数据库跟开发时候的数据库是同一个,为了不影响数据库的数据,需要在单测完成之后,将操作回滚。这在springboot中也是很容易解决的事情,只需要将单测类继承AbstractTransactionalJUnit4SpringContextTests即可
数据库有数据如下:
单元测试类如下:
测试方法如下:
@Testpublic void deleteAll() { userRepo.deleteAll();}
执行方法后,如果事务不会滚,则会清除user表中的所有数据。
通过结果查看,单测运行没有问题,查看数据库:
数据也没有被删除,证明事务已经回滚了。
把继承的AbstractTransactionalJUnit4SpringContextTests类去掉,再次执行deleteAll方法:
数据库中的数据已被删除
总结
本文介绍了springboot中写单元测试的方法。其实优雅的写单元测试需要涉及到很多东西,比如mock(mockito、mockmvc等),本文都没有涉及,有兴趣的可以了解下。
java 单元测试_在springboot中写单元测试解决依赖注入和执行后事务回滚问题相关推荐
- springboot 事务嵌套问题_在springboot中写单元测试解决依赖注入和执行后事务回滚问题...
往期文章 「Java并发编程」谈谈Java中的内存模型JMM 面试官:说说你知道多少种线程池拒绝策略 为什么不要在MySQL中使用UTF-8编码方式 前言 很多公司都有写单元测试的硬性要求,在提交代码 ...
- java参数值注入_在springboot中使用注解将值注入参数的操作
后端的许多管理系统需要登陆者的信息,如shiro登陆后,会将登陆者的信息存储在shiro的session,在使用时需要多行代码获取用户信息.可以把获取在shiro中的登陆者信息封装在一个类中,使用时获 ...
- Java IO练习--在程序中写一个“HelloJavaWorld你好世界“输出到操作系统文件Hello.txt文件中
package com.kj.test;import cn.hutool.core.io.IoUtil;import java.io.File; import java.io.FileOutputSt ...
- springboot事务回滚源码_Spring Boot中的事务是如何实现的
1. 概述 一直在用SpringBoot中的@Transactional来做事务管理,但是很少想过SpringBoot是如何实现事务管理的,今天从源码入手,看看@Transactional是如何实现事 ...
- 分布式系统:SpringBoot中Dubbo以及Zookeeper依赖包冲突 LoggerFactory is not a Logback LoggerContext but Logback
目录 QUESTION:SpringBoot中Dubbo以及Zookeeper依赖包冲突? ANSWER: 导入curator-recipes依赖: 排除依赖: QUESTION:SpringBoot ...
- mysql 事务回滚_简短截说阐述redis中事务的使用
我们知道,在关系型数据库中,比如mysql,如果要使用事务,首先向数据库服务器发送 BEGIN ,然后执行各个相互一致的写操作和读操作,最后,用户可以选择发送 COMMIT 来确认之前所做的修改,或者 ...
- java中的事务回滚_Spring中的事务回滚机制
问题:在Java项目汇中,添加@Transactional注解,报错之后,事务回滚未生效,数据仍插入数据库中.经查看报错位置位于新增成功之后.空指针异常. 一.特性 先了解一下@Transaction ...
- SpringBoot中配置为开发模式,代码修改后不用重新运行
场景 SpringBoot中配置为开发模式,修改代码后不用重新运行. 实现 打开pom.xml,添加依赖 <!-- 添加如下依赖,配置为开发模式,代码做了修改,不用重新运行--><! ...
- java超时事务回滚_查询超时和事务回滚的处理办法
开发平台V百科|使用技巧: 顾名思义,就是在查询程序中,当查询超过了规定的时间,设备仍未就绪时,就引发超时错误.简单理解,就是查询的时间太长了. 如在日志里看到报错信息为 Statement canc ...
最新文章
- 苹果手机怎么投屏 如何操作
- python多线程并行编程_Python并行编程(二):基于线程的并行
- [ExtJs6] 环境搭建及创建项目
- mongodb报错 An error occurred while loading navigation: topology was destroyed
- python为什么叫爬虫-总算领会python为什么叫爬虫
- 【Tkinter界面化小程序】用Python做一款免费音乐下载器、无广告无弹窗、清爽超流畅哦~
- 聚焦四个重组,构建基于IPD的卓越研发体系(3.0版)
- 并联串联混合的电压和电流_正确地把电池串联和并联起来
- word如何让单页变横向
- 交通银行一直显示服务器繁忙,交通银行信用卡人工服务一直繁忙
- 【Zookeeper面试篇】什么是羊群效应,公平锁怎么实现
- WTL for MFC Programmers, Part VI - Hosting ActiveX Controls
- php eot html,PHP eot
- 成都市计算机会考考试题,成都市初中信息技术会考试题_第七套.docx
- 摄影测量转角系统转换——OPK转换至POK下
- 假期之不务正业—— Qt+FFmpeg+百度api进行视频的语音识别
- 周鸿祎为短视频狂砸百亿
- Xshell的Sessions存放目录
- GeneXus Beta版本已经集成区块链技术
- 嫌疑人x的献身-----一些想法
热门文章
- 运行Qt程序的一些注意事项
- hive函数大全:11大类、109个函数
- 爬虫教程( 2 ) --- 爬虫框架 Scrapy、Scrapy 实战
- action在java_@Action(value=/login在java语句中是什么意思
- 怪哉翻译软件测试,[东方朔传翻译]东方朔传·怪哉原文与翻译
- java apktoo_apktool.jar
- 现代软件工程讲义 源代码管理
- python中字典的输出序列_python3:序列_字典(常用基础知识)
- rmse多少算效果好_关键词SEO优化带来流量有多少?如何做SEO优化效果好?
- java .item,javabb-javaitem-cloud