`
jy03100000
  • 浏览: 34247 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Springboot整合(4)——JUnit,事务

 
阅读更多

Springboot整合(4)——JUnit,事务

1. pom引入junitspringboot中引用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层的事务造成影响

 

 

运行测试类,数据库不会被插入数据

 

  • 大小: 9.8 KB
  • 大小: 10 KB
  • 大小: 10.3 KB
  • 大小: 4.4 KB
  • 大小: 15.7 KB
分享到:
评论

相关推荐

    SpringBoot简单的实现Junit单元测试和集成MyBatis分页

    SpringBoot简单的实现Junit单元测试和集成MyBatis分页,有什么不懂的地方可以在我的博客下方留言:https://blog.csdn.net/sujin_/article/details/79849772

    SpringBoot 源码解析——源码各模块代码统计.docx

    它提供了对SpringBoot应用进行测试的支持,包括JUnit集成、Mockito等测试工具的配置。 2. **spring-boot-starters**: 虽然在统计中显示为0行,但这是一个特殊的模块,包含了各种"starter",如web、data-jpa等,它们...

    springboot整合junit测试用例demo

    本示例将详细介绍如何将JUnit集成到Spring Boot项目中,以便编写和执行测试用例。JUnit是一个广泛使用的Java单元测试框架,它简化了测试过程,使得测试更加便捷高效。 首先,我们需要在Spring Boot项目中引入JUnit...

    ALevin配置环境所需要的基础包——JUnit

    ALevin配置环境所需要的基础包——JUnit5.8.2版 适合人群: 对虚拟网络嵌入算法感兴趣的人 能学到什么: 可以帮助大家更快的配置好ALevin运行环境 阅读建议: ALevin作为一个很好的虚拟网络仿真平台,它的开源给我们...

    SpringBoot实战:整合jUnit测试框架

    测试类上使用`@RunWith(SpringJUnit4ClassRunner.class)`注解,将jUnit与Spring环境结合;`@SpringBootTest`注解表示当前类是SpringBoot的测试类,并加载启动类`App.class`。 ### 五、运行测试类 1. **单个方法或...

    Springboot整合junit过程解析

    SpringBoot 整合 JUnit 过程解析 在软件开发领域中,测试是一个非常重要的环节。JUnit 是一个流行的 Java 单元测试框架,而 SpringBoot 是一个基于 Java 的 Web 应用程序框架。今天,我们将讨论如何将 JUnit 与 ...

    SpringBoot整合Junit实例过程解析

    import org.springframework.test.context.junit4.SpringRunner; import java.util.List; @RunWith(SpringRunner.class) @SpringBootTest(classes = SpringbootMybatisApplication.class) public class MybatisTest...

    Springboot_junit

    SpringBoot 1.5.6版本通常会包含对JUnit 4的支持,但如果需要使用更新的JUnit 5,需要单独引入。以下是一个JUnit 4的依赖示例: ```xml &lt;groupId&gt;junit &lt;artifactId&gt;junit &lt;version&gt;4.12 &lt;scope&gt;test ``` ...

    Eclipse安装插件——junit

    在Marketplace的搜索框中输入“junit”,然后会出现Junit的相关插件,如JUnit4或JUnit5。找到对应的版本后,点击“安装”按钮,按照向导提示完成安装过程。在安装过程中,可能需要你确认安装来源的安全性,并同意...

    springboot整合CXF发布webservice和客户端调用

    SpringBoot整合CXF是将流行的Java Web服务框架CXF与SpringBoot轻量级框架结合,以便更方便地创建和消费Web服务。这个项目提供了一个很好的示例,通过详细注释帮助开发者理解如何在SpringBoot应用中发布和调用Web服务...

    SpringBoot第 3 讲:SpringBoot+Junit+Log4J

    在本讲中,我们将深入探讨如何在SpringBoot项目中整合JUnit测试框架以及Log4J日志系统。SpringBoot简化了Java应用的开发流程,而JUnit是广泛使用的单元测试工具,Log4J则是一款强大的日志记录框架。让我们一起了解...

    SpringBoot 2.6.4 MyBatis PostgreSQL JUnit5 代码示例

    在本项目中,我们主要探讨的是如何在SpringBoot 2.6.4版本下整合MyBatis框架,使用PostgreSQL数据库,并结合JUnit5进行单元测试。这是一个完整的Java Web开发示例,涵盖了从依赖管理到实际操作数据库以及进行测试的...

    springboot整合es-springboot-elasticsearch.zip

    6. **测试与使用**:编写JUnit测试用例或在业务代码中调用Repository接口,验证Elasticsearch与SpringBoot的整合是否成功。 四、高级特性 - 使用`@Query`注解进行复杂查询 - 自定义`@Mapping`来控制字段的映射 - ...

    02. SpringBoot整合Web开发

    SpringBoot整合Web开发是现代Java应用开发中的常见实践,它极大地简化了配置和启动过程,使得开发者能够快速构建可部署的Web服务。本教程将深入探讨如何利用SpringBoot与Web技术进行集成,创建高效且易于维护的应用...

    SpringBoot中整合Junit测试示例源码

    在Spring Boot框架中,Junit是一个非常重要的工具,它用于编写和执行自动化测试。Spring Boot提供了与Junit的紧密集成,使得我们可以轻松地创建和运行测试用例,从而确保我们的应用代码的质量。以下是对这个主题的...

    Springboot整合Hibernate thymeleaf,添删改查,分页查询等,单元测试,亲测百分之白可运行

    4. 创建Repository接口:Spring Data JPA允许我们定义接口,继承JpaRepository或CrudRepository,自动提供CRUD(创建、读取、更新、删除)操作。 5. 编写Service层:在Service层处理业务逻辑,调用Repository接口...

    JavaSE测试类必备的两个jar包 ——junit-4.12.jar、hamcrest-core-1.3.jar

    JavaSE测试类必备的两个关键库是`junit-4.12.jar`和`hamcrest-core-1.3.jar`。这两个库在Java开发中扮演着重要角色,特别是对于单元测试和质量保证。 首先,我们来详细了解`junit-4.12.jar`。JUnit是Java编程语言中...

    springboot整合ssm

    SpringBoot 整合SSM(Spring、Struts2、MyBatis)虽然标题提到的是"springboot整合ssm",但通常SpringBoot项目并不直接与Struts2整合,因为SpringBoot自身提供了强大的Web MVC功能,它更倾向于使用Spring MVC而非...

Global site tag (gtag.js) - Google Analytics