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基本操作——SpringBoot使用RedisTemplate集成Redis(有demo) (五)SpringBoot基本操作——SpringBoot使用Jedis集成Redis(有demo)(六)SpringBoot基本操作——SpringBoot使用Junit4单元测试...
)(四)SpringBoot基本操作——SpringBoot使用RedisTemplate集成Redis(有demo) (五)SpringBoot基本操作——SpringBoot使用Jedis集成Redis(有demo)(六)SpringBoot基本操作——SpringBoot使用Junit4单元测试...
SpringBoot简单的实现Junit单元测试和集成MyBatis分页,有什么不懂的地方可以在我的博客下方留言:https://blog.csdn.net/sujin_/article/details/79849772
它提供了对SpringBoot应用进行测试的支持,包括JUnit集成、Mockito等测试工具的配置。 2. **spring-boot-starters**: 虽然在统计中显示为0行,但这是一个特殊的模块,包含了各种"starter",如web、data-jpa等,它们...
ALevin配置环境所需要的基础包——JUnit5.8.2版 适合人群: 对虚拟网络嵌入算法感兴趣的人 能学到什么: 可以帮助大家更快的配置好ALevin运行环境 阅读建议: ALevin作为一个很好的虚拟网络仿真平台,它的开源给我们...
"软件单元测试——JUnit使用" 软件单元测试是软件开发过程中的一种测试方法,它是指对软件中的最小单元进行测试,以确保软件的可靠性和正确性。JUnit是一个流行的Java测试框架,广泛应用于软件单元测试中。 在本...
测试类上使用`@RunWith(SpringJUnit4ClassRunner.class)`注解,将jUnit与Spring环境结合;`@SpringBootTest`注解表示当前类是SpringBoot的测试类,并加载启动类`App.class`。 ### 五、运行测试类 1. **单个方法或...
本示例将详细介绍如何将JUnit集成到Spring Boot项目中,以便编写和执行测试用例。JUnit是一个广泛使用的Java单元测试框架,它简化了测试过程,使得测试更加便捷高效。 首先,我们需要在Spring Boot项目中引入JUnit...
SpringBoot 整合 JUnit 过程解析 在软件开发领域中,测试是一个非常重要的环节。JUnit 是一个流行的 Java 单元测试框架,而 SpringBoot 是一个基于 Java 的 Web 应用程序框架。今天,我们将讨论如何将 JUnit 与 ...
import org.springframework.test.context.junit4.SpringRunner; import java.util.List; @RunWith(SpringRunner.class) @SpringBootTest(classes = SpringbootMybatisApplication.class) public class MybatisTest...
SpringBoot 1.5.6版本通常会包含对JUnit 4的支持,但如果需要使用更新的JUnit 5,需要单独引入。以下是一个JUnit 4的依赖示例: ```xml <groupId>junit <artifactId>junit <version>4.12 <scope>test ``` ...
在Marketplace的搜索框中输入“junit”,然后会出现Junit的相关插件,如JUnit4或JUnit5。找到对应的版本后,点击“安装”按钮,按照向导提示完成安装过程。在安装过程中,可能需要你确认安装来源的安全性,并同意...
SpringBoot整合CXF是将流行的Java Web服务框架CXF与SpringBoot轻量级框架结合,以便更方便地创建和消费Web服务。这个项目提供了一个很好的示例,通过详细注释帮助开发者理解如何在SpringBoot应用中发布和调用Web服务...
在本讲中,我们将深入探讨如何在SpringBoot项目中整合JUnit测试框架以及Log4J日志系统。SpringBoot简化了Java应用的开发流程,而JUnit是广泛使用的单元测试工具,Log4J则是一款强大的日志记录框架。让我们一起了解...
在本项目中,我们主要探讨的是如何在SpringBoot 2.6.4版本下整合MyBatis框架,使用PostgreSQL数据库,并结合JUnit5进行单元测试。这是一个完整的Java Web开发示例,涵盖了从依赖管理到实际操作数据库以及进行测试的...
6. **测试与使用**:编写JUnit测试用例或在业务代码中调用Repository接口,验证Elasticsearch与SpringBoot的整合是否成功。 四、高级特性 - 使用`@Query`注解进行复杂查询 - 自定义`@Mapping`来控制字段的映射 - ...
SpringBoot整合Web开发是现代Java应用开发中的常见实践,它极大地简化了配置和启动过程,使得开发者能够快速构建可部署的Web服务。本教程将深入探讨如何利用SpringBoot与Web技术进行集成,创建高效且易于维护的应用...
在Spring Boot框架中,Junit是一个非常重要的工具,它用于编写和执行自动化测试。Spring Boot提供了与Junit的紧密集成,使得我们可以轻松地创建和运行测试用例,从而确保我们的应用代码的质量。以下是对这个主题的...
4. 创建Repository接口:Spring Data JPA允许我们定义接口,继承JpaRepository或CrudRepository,自动提供CRUD(创建、读取、更新、删除)操作。 5. 编写Service层:在Service层处理业务逻辑,调用Repository接口...