往期文章

「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中写单元测试解决依赖注入和执行后事务回滚问题相关推荐

  1. springboot 事务嵌套问题_在springboot中写单元测试解决依赖注入和执行后事务回滚问题...

    往期文章 「Java并发编程」谈谈Java中的内存模型JMM 面试官:说说你知道多少种线程池拒绝策略 为什么不要在MySQL中使用UTF-8编码方式 前言 很多公司都有写单元测试的硬性要求,在提交代码 ...

  2. java参数值注入_在springboot中使用注解将值注入参数的操作

    后端的许多管理系统需要登陆者的信息,如shiro登陆后,会将登陆者的信息存储在shiro的session,在使用时需要多行代码获取用户信息.可以把获取在shiro中的登陆者信息封装在一个类中,使用时获 ...

  3. Java IO练习--在程序中写一个“HelloJavaWorld你好世界“输出到操作系统文件Hello.txt文件中

    package com.kj.test;import cn.hutool.core.io.IoUtil;import java.io.File; import java.io.FileOutputSt ...

  4. springboot事务回滚源码_Spring Boot中的事务是如何实现的

    1. 概述 一直在用SpringBoot中的@Transactional来做事务管理,但是很少想过SpringBoot是如何实现事务管理的,今天从源码入手,看看@Transactional是如何实现事 ...

  5. 分布式系统:SpringBoot中Dubbo以及Zookeeper依赖包冲突 LoggerFactory is not a Logback LoggerContext but Logback

    目录 QUESTION:SpringBoot中Dubbo以及Zookeeper依赖包冲突? ANSWER: 导入curator-recipes依赖: 排除依赖: QUESTION:SpringBoot ...

  6. mysql 事务回滚_简短截说阐述redis中事务的使用

    我们知道,在关系型数据库中,比如mysql,如果要使用事务,首先向数据库服务器发送 BEGIN ,然后执行各个相互一致的写操作和读操作,最后,用户可以选择发送 COMMIT 来确认之前所做的修改,或者 ...

  7. java中的事务回滚_Spring中的事务回滚机制

    问题:在Java项目汇中,添加@Transactional注解,报错之后,事务回滚未生效,数据仍插入数据库中.经查看报错位置位于新增成功之后.空指针异常. 一.特性 先了解一下@Transaction ...

  8. SpringBoot中配置为开发模式,代码修改后不用重新运行

    场景 SpringBoot中配置为开发模式,修改代码后不用重新运行. 实现 打开pom.xml,添加依赖 <!-- 添加如下依赖,配置为开发模式,代码做了修改,不用重新运行--><! ...

  9. java超时事务回滚_查询超时和事务回滚的处理办法

    开发平台V百科|使用技巧: 顾名思义,就是在查询程序中,当查询超过了规定的时间,设备仍未就绪时,就引发超时错误.简单理解,就是查询的时间太长了. 如在日志里看到报错信息为 Statement canc ...

最新文章

  1. 苹果手机怎么投屏 如何操作
  2. python多线程并行编程_Python并行编程(二):基于线程的并行
  3. [ExtJs6] 环境搭建及创建项目
  4. mongodb报错 An error occurred while loading navigation: topology was destroyed
  5. python为什么叫爬虫-总算领会python为什么叫爬虫
  6. 【Tkinter界面化小程序】用Python做一款免费音乐下载器、无广告无弹窗、清爽超流畅哦~
  7. 聚焦四个重组,构建基于IPD的卓越研发体系(3.0版)
  8. 并联串联混合的电压和电流_正确地把电池串联和并联起来
  9. word如何让单页变横向
  10. 交通银行一直显示服务器繁忙,交通银行信用卡人工服务一直繁忙
  11. 【Zookeeper面试篇】什么是羊群效应,公平锁怎么实现
  12. WTL for MFC Programmers, Part VI - Hosting ActiveX Controls
  13. php eot html,PHP eot
  14. 成都市计算机会考考试题,成都市初中信息技术会考试题_第七套.docx
  15. 摄影测量转角系统转换——OPK转换至POK下
  16. 假期之不务正业—— Qt+FFmpeg+百度api进行视频的语音识别
  17. 周鸿祎为短视频狂砸百亿
  18. Xshell的Sessions存放目录
  19. GeneXus Beta版本已经集成区块链技术
  20. 嫌疑人x的献身-----一些想法

热门文章

  1. 运行Qt程序的一些注意事项
  2. hive函数大全:11大类、109个函数
  3. 爬虫教程( 2 ) --- 爬虫框架 Scrapy、Scrapy 实战
  4. action在java_@Action(value=/login在java语句中是什么意思
  5. 怪哉翻译软件测试,[东方朔传翻译]东方朔传·怪哉原文与翻译
  6. java apktoo_apktool.jar
  7. 现代软件工程讲义 源代码管理
  8. python中字典的输出序列_python3:序列_字典(常用基础知识)
  9. rmse多少算效果好_关键词SEO优化带来流量有多少?如何做SEO优化效果好?
  10. java .item,javabb-javaitem-cloud