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 小结
- 测试用例回滚事务
版权声明:本文为weixin_44226181原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。