Springboot整合(4)——JUnit,事务
1. pom引入junit,springboot中引用junit就是直接依赖spring-boot-starter-test
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2. 通常测试放在service层做,所以首先编写service层代码,为统一整个项目编码风格,先创建2个辅助类,ReturnResult封装所有service层返回数据结果,Constants系统常量
publicclass ReturnResult {
private static final long serialVersionUID = 1L;
/**
* 返回码,1表示成功,0表示失败
*/
privateintcode;
/**
* 返回消息,可以是错误信息,也可以是其他提示信息
*/
private String message;
/**
* 实际的数据返回
*/
private HashMap<String, Object> data = new HashMap<String, Object>();
...getter and setter...
}
publicclass Constants {
/**
* 表示数据状态为正常
*/
publicstaticfinalbyteSTATUS_NORMAL = 1;
/**
* 表示数据状态为已删除或作废
*/
publicstaticfinalbyteSTATUS_DELETED = 2;
/**
* 默认密码:$888888
*/
publicstaticfinal String DEFAULT_PASSWORD = "$888888";
}
UserService.java
@Service
publicclass UserService {
@Resource
private SysUserMapper userMapper;
public ReturnResult add(SysUser user) {
ReturnResult rs = new ReturnResult();
SysUser exist = getByLoginName(user.getLoginName());
if (exist != null) {
rs.setCode(0);
rs.setMessage("登录账号已存在");
returnrs;
}
user.preInsert();
user.setLoginPassword("admin");
userMapper.insert(user);
rs = new ReturnResult(1, "添加成功");
rs.putData("entity", user);
returnrs;
}
public ReturnResult update(SysUser user) {
ReturnResult rs = new ReturnResult();
SysUser exist = getByLoginName(user.getLoginName());
if (exist != null) {
rs.setCode(0);
rs.setMessage("登录账号已存在");
returnrs;
}
user.preUpdate();
inteffectRow = userMapper.updateByPrimaryKeySelective(user);
rs = new ReturnResult(1, "更新成功");
rs.putData("effectRow", effectRow);
returnrs;
}
public ReturnResult delete(String id) {
inteffectRow = userMapper.deleteByPrimaryKey(id);
ReturnResult rs = new ReturnResult(1, "删除成功");
rs.putData("effectRow", effectRow);
returnrs;
}
public ReturnResult get(String id) {
SysUser entity = userMapper.selectByPrimaryKey(id);
ReturnResult rs = new ReturnResult(1, "查询成功");
rs.putData("entity", entity);
returnrs;
}
public ReturnResult list() {
SysUserExample example = new SysUserExample();
Criteria c = example.createCriteria();
c.andDataStatusEqualTo(Constants.STATUS_NORMAL);
example.setOrderByClause(" updateTime desc");
List<SysUser> list = userMapper.selectByExample(example);
ReturnResult rs = new ReturnResult(1, "查询成功");
rs.putData("list", list);
returnrs;
}
public SysUser getByLoginName(String loginName) {
SysUserExample example = new SysUserExample();
Criteria c = example.createCriteria();
c.andDataStatusEqualTo(Constants.STATUS_NORMAL);
c.andLoginNameEqualTo(loginName);
List<SysUser> list = userMapper.selectByExample(example);
if (list.size() > 0) {
returnlist.get(0);
} else {
returnnull;
}
}
}
3. 编写测试类,springboot使用junit非常简单,只要给类写以下2个红色注解就可以
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
publicclass UserServiceTest {
@Resource
UserService userService;
@Test
publicvoid testAdd() {
SysUser user = new SysUser();
user.setLoginName("test1");
user.setLoginPassword("test1");
user.setUserName("第一个user");
userService.add(user);
Assert.assertEquals(1, rs.getCode());
}
}
4. 运行测试类,显示绿色正常,检查数据库,数据已经插入
5. 配置数据自动回滚。
再次运行测试类,测试不通过,因为用户已存在,这显然不利于自动化重复测试。没关系,springtest提供了数据回滚功能,只需要在测试方法上添加一个@Transactional 即可
删除刚才插入的数据,再次运行测试用例,junit测试结果为绿色,但数据不会被插入。
如果你就是想让测试数据对数据库生效,可以添加@Rollback(false)
6. 在service层开启事务管理。一个@Transactional注解搞定
注: 在service层开启事务后,即使测试方法添加了@Rollback(false) ,如果service方法报错,事务也不会提交,数据库同样会回滚,不用担心这个rollback会对service层的事务造成影响
运行测试类,数据库不会被插入数据
相关推荐
springboot整合junit测试用例demo
SpringBoot 2.6.4 MyBatis PostgreSQL JUnit5 代码示例
SpringBoot简单的实现Junit单元测试和集成MyBatis分页,有什么不懂的地方可以在我的博客下方留言:https://blog.csdn.net/sujin_/article/details/79849772
SpringBoot实战:整合jUnit测试框架一、前言二、添加依赖三、简单业务代码四、创建测试类五、运行测试类1.单个方法或类的测试2.运行整个项目的测试方法2.1.使用IDEA运行整个项目的测试类2.2.使用maven命令运行整个...
SpringBoot中整合Junit测试示例源码
Springboot1.5.6版本集成JUnit的测试demo代码
ALevin配置环境所需要的基础包——JUnit5.8.2版 适合人群: 对虚拟网络嵌入算法感兴趣的人 能学到什么: 可以帮助大家更快的配置好ALevin运行环境 阅读建议: ALevin作为一个很好的虚拟网络仿真平台,它的开源给我们...
springboot整合junit进行单元测试的项目代码(b站黑马程序员同步代码)
NULL 博文链接:https://banlalaotou.iteye.com/blog/1066625
用Eclipse进行软件单元测试,具体步骤和示例。
JUnit是一个开放原始码的Java测试框架,用来撰写与执行重复性的测试,它是用于单元测试框架的xUnit架构的实例.本文对其使用做了介绍。
SpringBoot使用Junit进行单元测试,对如何在Springboot中使用Junit进行单元测试提供示例。
主要介绍了Springboot整合junit过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
免费!!!!!!!!!!!!!!!!!!!!!!!!!
主要介绍了SpringBoot整合Junit实例过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
springboot-junit Junit与Springboot应用程序
本设计源码提供了一个基于...该项目是基于Springboot框架,整合了Mybatis-Plus、Druid、Junit和Swagger等工具,实现了一个前后端分离的小项目。适合用于学习和实践Java技术,以及开发基于Springboot的SSM相关的系统。
Springboot-junit项目源码压缩包,仅供参考。如有错误之处还望指正。
IntelliJ IDEA创建springboot_mybatis3_ junit4 web项目
junit_log4j_demo.zip