Spring 使用介绍(十)—— 单元测试
一、概述
Spring测试框架提供了对单元测试的支持,以便使用spring的依赖注入和事务管理功能
maven依赖:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
二、简单示例
业务接口及实现类
public interface UserService {
void addUser(String name, int age);
void updateUserName(String name);
}
@Service
public class UserServiceImpl implements UserService { @Autowired
private DataSource dataSource; public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
} @Transactional(propagation = Propagation.REQUIRED)
@Override
public void addUser(String name, int age) {
String sql = String.format("INSERT INTO `user`(user_name, age) VALUES('%s', %d)", name, age);
new JdbcTemplate(dataSource).update(sql); this.updateUserName(name + "_" + name);
} @Transactional(propagation = Propagation.REQUIRED)
@Override
public void updateUserName(String name) {
String sql = String.format("UPDATE `user` SET user_name = '%s'", name);
new JdbcTemplate(dataSource).update(sql); // throw new RuntimeException("9965");
}
}
XML配置
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"> <!-- 数据源 -->
<bean id="mysql" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
...
</bean> <!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="mysql"/>
</bean> <!-- 开启事务注解支持 -->
<tx:annotation-driven transaction-manager="transactionManager"/> <context:component-scan base-package="cn.matt.transaction"/>
</beans>
测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-context.xml")
// @TransactionConfiguration(transactionManager = "txManager", defaultRollback=true)
public class BaseSpringTest { }
public class TransactionConfigTest extends BaseSpringTest {
@Autowired
UserService userService;
@Test
@Transactional
public void testTransactionConfig() {
userService.addUser("jerry", 30);
}
}
三、配置说明:
- @RunWith:用于指定junit运行环境,spring提供SpringJUnit4ClassRunner作为Junit测试环境,方便使用spring的依赖注入
- @ContextConfiguration:导入Spring配置文件
- @TransactionConfiguration:开启测试类的事务管理支持配置,并指定事务管理器和默认回滚行为,一般无须配置
- @Transactional:表示事务支持,指定方法执行完后自动回滚,可使用在类和方法上
- 使用在方法上,表示该方法获得事务支持
- 使用在类上,表示测试类的所有方法默认获得事务支持
- @Rollback:事务回滚注解,默认为true,可省略,若需要提交事务,须设为false,如下:
public class TransactionConfigTest extends BaseSpringTest {
@Autowired
UserService userService;
@Test
@Transactional
@Rollback(false)
public void testTransactionConfig() {
userService.addUser("jerry", 30);
}
}
参考:
第十三章 测试 之 13.1 概述 13.2 单元测试 ——跟我学spring3
第十三章 测试 之 13.3 集成测试 ——跟我学spring3
Spring 使用介绍(十)—— 单元测试的更多相关文章
- [翻译]Spring框架参考文档(V4.3.3)-第二章Spring框架介绍 2.1 2.2 翻译--2.3待继续
英文链接:http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/overview.ht ...
- spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法
spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法 前言 本篇接着<spring boot / cloud ...
- spring boot / cloud (十五) 分布式调度中心进阶
spring boot / cloud (十五) 分布式调度中心进阶 在<spring boot / cloud (十) 使用quartz搭建调度中心>这篇文章中介绍了如何在spring ...
- spring boot / cloud (十二) 异常统一处理进阶
spring boot / cloud (十二) 异常统一处理进阶 前言 在spring boot / cloud (二) 规范响应格式以及统一异常处理这篇博客中已经提到了使用@ExceptionHa ...
- Spring Cloud(十二):分布式链路跟踪 Sleuth 与 Zipkin【Finchley 版】
Spring Cloud(十二):分布式链路跟踪 Sleuth 与 Zipkin[Finchley 版] 发表于 2018-04-24 | 随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请 ...
- Spring 的介绍和目标
1. Spring介绍 打开Spring 官网查看对 Spring 的介绍和目标 http://www.springsource.org/about We believe that: · J2EE s ...
- Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控
Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控 Spring Boot Actuator提供了对单个Spring Boot的监控,信息包含: ...
- Spring Cloud(十):服务网关 Zuul(路由)【Finchley 版】
Spring Cloud(十):服务网关 Zuul(路由)[Finchley 版] 发表于 2018-04-23 | 更新于 2018-05-09 | 通过之前几篇 Spring Cloud 中 ...
- 【spring boot】10.spring boot下的单元测试
spring boot下的单元测试,思前想后还是需要单独用一章篇幅来看看. 然后在看了介绍和使用时候,我感觉并不想多去看了. 但是还是给后来人留下参考的路径: 官网说明:https://spring. ...
随机推荐
- 基于 Vue + Koa2 + MongoDB + Redis 实现一个完整的登录注册
项目地址:https://github.com/caochangkui/vue-element-responsive-demo/tree/login-register 通过 vue-cli3.0 + ...
- React-菜鸟学习笔记(一)
新公司的项目前端架构用的是react.js 之前孤陋寡闻并没听说过,想着后期开发和维护多少要会点前端的东西,就简单研究一下.个人的学习习惯能写代码的就不写文字,必要的地方加两行注释,代码一行行敲下去, ...
- 获得其他程序弹出菜单的内容(一个困扰许久的问题o(╯□╰)o)
刚开始到现在公司的时候接到一个任务:开发一个activex控件,自动操作本地exe程序,当时遇到弹出菜单无法获取的问题,还好不影响,最近又遇到这个问题,绕不过去了,于是昨天花了一个上午百度了个遍,总算 ...
- POJ - 2528 区间离散化,线段树区间修改,区间询问
这个题非常有意思的地方是,我们发现区间[1,4]和[5,8]是紧挨着的,因为这个的数代表的是一段区间,原本我们对于普通的离散, a[1]=1,a[2]=5,a[3]=6,a[4]=8;数组下标就是重新 ...
- python的循环和选择
一.python的选择结构: python的选择结构有两种选择结构一种是单选择(if...else)另一种则是多选择结构(if ...elif...elif) 下面用代码来实现: 1.if....el ...
- Day15 Python基础之logging模块(十三)
参考源:http://www.cnblogs.com/yuanchenqi/articles/5732581.html logging模块 (****重点***) 一 (简单应用) import lo ...
- Django 2.0 学习
Django django是基于MTV结构的WEB框架 Model 数据库操作 Template 模版文件 View 业务处理 在Python中安装django 2.0 1 直接安装 pip inst ...
- win64位安装python-mysqldb1.2.3
在其他版本的mysqldb里面时间查询有问题最后确定还是在 1.2.5 版本下来解决,需要解决的问题就是这个:“Cannot open include file: 'config-win.h': No ...
- 多线程系列之四:Guarded Suspension 模式
一,什么是Guarded Suspension模式如果执行现在的处理会造成问题,就让执行处理的线程等待.这种模式通过让线程等待来保证实例的安全性 二,实现一个简单的线程间通信的例子 一个线程(Clie ...
- vue-router的简单实现原理
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...