SpringBoot SpringBoot 开发实用篇 3 测试 3.9 业务层测试事务回滚

SpringBoot

【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】

SpringBoot 开发实用篇

3 测试

3.9 业务层测试事务回滚

3.9.1 问题引入

再次看到我们之前做的 SSMP 案例

在这里插入图片描述

我们既测了数据层,又测了表现层,问题其实我们已经遇到过了

在这里插入图片描述

上次我们跳过了测试,但是如果不跳过,执行生命周期时,只要经过test, 那数据库就会“乱套了

【运行一次就留一组数据,或多或少,取决于自己的测试内容】【产生垃圾数据】

有没有办法,既执行了测试,又不会影响我的数据库呢?【当然】

3.9.2 业务层测试事务回滚

先把SSMP 工程抄一抄

在这里插入图片描述

这是数据源

做dao 和业务层

先导一下MP 的坐标、druid 、MySQL驱动

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.11</version>
</dependency>


<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

在这里插入图片描述

OK

实体类写过了

dao

package com.dingjiaxiong.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dingjiaxiong.domain.Book;
import org.apache.ibatis.annotations.Mapper;

/**
 * ClassName: BookDao
 * date: 2022/10/17 13:52
 *
 * @author DingJiaxiong
 */

@Mapper
public interface BookDao extends BaseMapper<Book> {
}

复制的

service

package com.dingjiaxiong.service;

import com.dingjiaxiong.domain.Book;

/**
 * ClassName: BookService
 * date: 2022/10/19 21:57
 *
 * @author DingJiaxiong
 */

public interface BookService {

    public boolean save(Book book);

}

实现类

package com.dingjiaxiong.service.impl;

import com.dingjiaxiong.dao.BookDao;
import com.dingjiaxiong.domain.Book;
import com.dingjiaxiong.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * ClassName: BookServiceImpl
 * date: 2022/10/19 21:57
 *
 * @author DingJiaxiong
 */

@Service
public class BookServiceImpl implements BookService {

    @Autowired
    private BookDao bookDao;

    @Override
    public boolean save(Book book) {
        return bookDao.insert(book) > 0;
    }
}

OK,大概就完成了

创建一个新的测试类 DaoTest

package com.dingjiaxiong;

import com.dingjiaxiong.service.BookService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * ClassName: DaoTest
 * date: 2022/10/20 9:44
 *
 * @author DingJiaxiong
 */

@SpringBootTest
public class DaoTest {

    @Autowired
    private BookService bookService;

    @Test
    void testSave(){
        
    }
}

OK,齐活儿

直接测试一下

package com.dingjiaxiong;

import com.dingjiaxiong.domain.Book;
import com.dingjiaxiong.service.BookService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * ClassName: DaoTest
 * date: 2022/10/20 9:44
 *
 * @author DingJiaxiong
 */

@SpringBootTest
public class DaoTest {

    @Autowired
    private BookService bookService;

    @Test
    void testSave(){
        Book book = new Book();
        book.setName("springboot666");
        book.setType("springboot");
        book.setDescription("springboot123");

        bookService.save(book);

    }
}

直接运行

在这里插入图片描述

OK,插入成功

现在想让这个测试,该执行执行,但是执行完毕之后,不要把数据装入数据库

【基本思路:把事务给它关掉】

在这里插入图片描述

加上这个注解后,再测一次

在这里插入图片描述

结果看来,数据并没有存进去,把这个注解注掉再试一次

在这里插入图片描述

没有这个注解,数据就进去了

这个仔细观察,发现

在这里插入图片描述

41 被占用了,好家伙

这就说明开启注解的那次操作是成功了,只不过它自己做了一个回滚

现在试试加上回滚注解

在这里插入图片描述

直接测试

在这里插入图片描述

可以看到,数据仍然添加成功 了,因为我们明确写了不回滚【默认回滚注解是true】

如果写成true, 就会进行回滚,导致不能加进去了

在这里插入图片描述

OK,就是这样

回顾一下

在这里插入图片描述

3.9.3 小结
  1. 测试用例回滚事务

版权声明:本文为weixin_44226181原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。