spring测试事务
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于spring测试事务内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在spring测试事务相关知识领域提供全面立体的资料补充。同时还包含 safari浏览器、samba、SAMP 的知识内容,欢迎查阅!
spring测试事务相关知识
-
事务前沿研究丨事务测试体系解析作者介绍:童牧。 绪论 在程序员的生涯中,bug 一直伴随着我们,虽然我们期望写出完美的程序,但是再优秀的程序员也无法保证自己能够不写出 bug。因此,我们为程序编写测试,通过提前发现 bug 来提高最终交付程序的质量。我从在 PingCAP 的工作中感受到,做好数据库和做好数据库测试是密不可分的,本次分享,我们将在第一讲的事务隔离级别的基础上,对数据库事务的测试进行研究,主要讲述,在 PingCAP 我们是如何保证事务的正确性的。 因为我们保证事务正确性的方法比较多,所以本次
-
Spring Boot:单元测试单元测试单元测试注意事项测试方法必须用@Test修饰测试方法必须使用public void修饰,不能带参数一般使用单元测试会新建一个test目录存放测试代码,在生产部署时只要将test代码目录删除即可测试代码的包应该和被测试代码的包结构一致测试单元中的每个方法必须可以独立测试,方法间不能有任何依赖测试类一般用Test作为类名后缀测试放一般使用test作为方法名前缀常用注解@Test:将一个普通方法修饰称一个测试方法@Test(excepted==xx.class) 忽略某异常类@Test(timeout=毫秒数) 测试方法执行时间是否符合预期@BeforeClass:会在所有方法执行前执行@Afterclass:会在所有方法执行后执行@Before:在每一个测试方法被运行前执行一次@After:在每一个测试方法运行后执行一次@Ignore:修饰的方法会被测试运行器忽略@RunWith:更改测试运行器@RunWith(SpringRunner.class)Spring Boot 单元测试Spring Boot
-
Spring 5 中文解析测试篇-Spring MVC测试框架3.6 Spring MVC测试框架 Spring MVC测试框架提供了一流的支持,可使用可与JUnit、TestNG或任何其他测试框架一起使用的流畅API测试Spring MVC代码。它基于spring-test模块的Servlet API模拟对象构建,因此不使用运行中的Servlet容器。它使用DispatcherServlet提供完整的Spring MVC运行时行为,并支持通过TestContext框架加载实际的Spring配置以及独立模式,在独立模式下,你可以手动实例化控制器并一次对其进行测试。 Spring MVC Test还为使用RestTemplate的代码提供客户端支持。客户端
-
Spring事务原理分析在经历的几轮面试中,每一轮都问到了事务相关的内容,让我越发感到事务的重要性。 如: MySQL事务隔离级别?分别解释下他们的含义,默认的事务隔离级别是什么,Oracle的呢? Spring事务传播级别?分别代表什么含义 Spring事务是如何处理的?自己能写出来吗? 那么今天一起看一下Spring的事务处理方式。我自己想手写事务的时候,发现还是太依赖Spring框架提供的功能了,自己写对我来说还是有一定的难度,在此分析一下Spring的实现方式。 整体结构 Spring初始化概览 Spring整个框架包含很
spring测试事务相关课程
spring测试事务相关教程
- 5.4 测试分布式事务 在测试方法上添加 @Transactional 开启事务,然后在两个数据源操作中间模拟抛出异常。实例: /** * 插入测试 */ @Test @Transactional // 开启事务 void testInsert() { // 数据源1插入数据 OrderDo order = new OrderDo(); order.setCount(1L); order.setGoodsId(1L); int affectRows1 = orderDao.insert(order); // 模拟抛出异常 int a = 1 / 0; // 数据源2插入数据 ErpOrderDo erpOrder = new ErpOrderDo(); erpOrder.setCount(order.getCount()); erpOrder.setGoodsId(order.getGoodsId()); erpOrder.setOutId(order.getId()); int affectRows2 = erpOrderDao.insert(erpOrder); assertEquals(1, affectRows1); assertEquals(1, affectRows2); }此时运行测试类,可以发现数据源 1 的事务已回滚,验证成功!Tips:如果运行测试类报错 master..xp_sqljdbc_xa_init_ex 相关信息,是 SQL Server 默认配置不支持分布式事务问题,可查询相关资料解决该问题。
- 3. Spring MVC 测试集成 这部分需要配合 Spring MVC 的集成测试模块。
- 6.2 一个事务方法调用另一个事务方法时失效 先看下面的实例,我们修改下 OrderService 类,通过一个事务方法调用 createOrder 方法。实例:/** * 订单服务类 */@Service // 注册为服务类public class OrderService { @Autowired private GoodsDao goodsDao; @Autowired private OrderDao orderDao; @Transactional // 开启事务 public int startCreateOrder(Long goodsId, Long count) throws Exception { return this.createOrder(goodsId, count); } /** * 下单 * * @param goodsId 购买商品id * @param count 购买商品数量 * @return 生成订单数 */ @Transactional(rollbackFor = Exception.class) // 抛出异常即回滚 public int createOrder(Long goodsId, Long count) throws Exception { // 锁定商品库存 GoodsDo goods = goodsDao.selectForUpdate(goodsId); // 扣减库存 Long newNum = goods.getNum() - count; goods.setNum(newNum); goodsDao.update(goods); if (count > goods.getNum()) { // 非受检查异常抛出时,会回滚 throw new Exception(); } // 生成订单 OrderDo order = new OrderDo(); order.setGoodsId(goodsId); order.setCount(count); int affectRows = orderDao.insert(order); return affectRows; }}此时我们在测试类中通过 startCreateOrder 方法再去调用 createOrder 方法,代码如下:实例:/** * 订单测试 */@SpringBootTestclass OrderTest { @Autowired private OrderService orderService; /** * 创建订单测试 */ @Test void testCreateOrder() throws Exception { // 购买id为1的商品1份 int affectRows = orderService.startCreateOrder(1L, 100L); assertEquals(1, affectRows); }}startCreateOrder 和 createOrder 方法都是事务方法,且这两个方法事务特性不同 (一个没有 rollbackFor=Exception.class),如果我们调用 startTransaction 方法,则 createOrder 中的事务并不会生效。也就是说,如果在同一个类中,一个事务方法调用另一个事务方法,可能会导致被调用的事务方法的事务失效!这是因为 Spring 的声明式事务使用了代理,具体机制此处不再探讨,但是一定要注意规避这种事务失效的场景。
- 3.6 测试 测试类代码同 spring-boot-hikari 一致,运行测试类后,结果如下:use time:1428mscom.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper
- 2.6 测试 通过测试类发起测试,此处我们简单执行 1000 次插入,看看执行时间。需要注意的是,Spring Boot 进行测试时,需要添加注解 @SpringBootTest 。添加注解后该类可以直接通过 @Test 标注的方法发起单元测试,容器环境都已准备好,非常方便。实例:@SpringBootTest // 通过该注解,开启测试类功能,当测试方法启动时,启动了Spring容器class SpringBootHikariApplicationTests { @Autowired private DataSource dataSource;// 自动注入数据源 @Autowired private GoodsDao goodsDao; /** * 打印数据源信息 */ @Test // 测试方法 void printDataSource() { System.out.println(dataSource); } /** * 批量插入测试 */ @Test void insertBatch() { // 开始时间 long startTime = System.currentTimeMillis(); // 执行1000次插入 GoodsDo goods = new GoodsDo(); goods.setName("测试"); goods.setPic("测试图片"); goods.setPrice("1.0"); for (int i = 0; i < 1000; i++) { goodsDao.insert(goods); } // 输出操作时间 System.out.println("use time:" + (System.currentTimeMillis() - startTime)+"ms"); }}输出结果如下,可见默认数据源类型为 HikariDataSource ,插入 1000 条数据的时间大概为 1500ms (注意时间可能跟电脑性能等很多因素相关,此处只是进行简单的对比测试)。use time:1518mscom.zaxxer.hikari.HikariDataSource
- 1.1 添加测试代码 这里面我们在 mall-order 模块中增加生成订单的方法,这个方法调用后会生成一个 OrderEntity 对象,里面包括订单编号(orderNuM)和订单所有者(orderOwner)两个字段。(这里我们仅仅是用来模拟单元测试,对业务的具体逻辑不做过多纠结)首先,我们在 mall-order 模块的 pom.xml 文件中添加需要的依赖。<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId></dependency>添加依赖后,我们在项目中创建 service 目录和 entity 目录,分别用于存放项目的服务层代码和实体类。在项目中添加对应的 service 和 entity并且在对应的测试目录中,增加该服务层代码的测试类 OrderServiceTest。完成后,我们可以执行该测试用例,来调试 OrderService 中的 generateOrder 方法。从调试结果来看,我们的方法被成功调用,并且没有异常。
spring测试事务相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议