一、概述

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);
}
}

参考:

Spring整合Junit4进行单元测试

第十三章 测试 之 13.1 概述 13.2 单元测试 ——跟我学spring3

第十三章 测试 之 13.3 集成测试 ——跟我学spring3

Spring 使用介绍(十)—— 单元测试的更多相关文章

  1. [翻译]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 ...

  2. spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法

    spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法 前言 本篇接着<spring boot / cloud ...

  3. spring boot / cloud (十五) 分布式调度中心进阶

    spring boot / cloud (十五) 分布式调度中心进阶 在<spring boot / cloud (十) 使用quartz搭建调度中心>这篇文章中介绍了如何在spring ...

  4. spring boot / cloud (十二) 异常统一处理进阶

    spring boot / cloud (十二) 异常统一处理进阶 前言 在spring boot / cloud (二) 规范响应格式以及统一异常处理这篇博客中已经提到了使用@ExceptionHa ...

  5. Spring Cloud(十二):分布式链路跟踪 Sleuth 与 Zipkin【Finchley 版】

    Spring Cloud(十二):分布式链路跟踪 Sleuth 与 Zipkin[Finchley 版]  发表于 2018-04-24 |  随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请 ...

  6. Spring 的介绍和目标

    1. Spring介绍 打开Spring 官网查看对 Spring 的介绍和目标 http://www.springsource.org/about We believe that: · J2EE s ...

  7. Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控

    Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控 Spring Boot Actuator提供了对单个Spring Boot的监控,信息包含: ...

  8. Spring Cloud(十):服务网关 Zuul(路由)【Finchley 版】

    Spring Cloud(十):服务网关 Zuul(路由)[Finchley 版]  发表于 2018-04-23 |  更新于 2018-05-09 |  通过之前几篇 Spring Cloud 中 ...

  9. 【spring boot】10.spring boot下的单元测试

    spring boot下的单元测试,思前想后还是需要单独用一章篇幅来看看. 然后在看了介绍和使用时候,我感觉并不想多去看了. 但是还是给后来人留下参考的路径: 官网说明:https://spring. ...

随机推荐

  1. Nodejs mongoose 详解

    前言 Mongoose 是在nodejs环境下,对mongodb进行便捷操作的对象模型工具.本文介绍解(翻)密(译)Mongoose插件. Schema 开始我们就要讲到Schema,一个Schema ...

  2. windows安装Redis和客户端

    一.Windows安装Redis 1.下载安装包Redis-x64-3.0.504.zip到本地 2.解压 3.打开CMD,切换到解压后的redis目录,然后 C:\Users\Administrat ...

  3. 007-迅雷定时重启AutoHotkey脚本-20190411

    ;; 定时重启迅雷.ahk,;;~ 2019年04月11日;#SingleInstance,forceSetWorkingDir,%A_ScriptDir%DetectHiddenWindows,On ...

  4. lower_bound函数与upper_bound函数

    头文件 : algorithm vector<int>a a中的元素必须升序,用的是二分 lower_bound(a.begin(),a.end(),k) 返回a容器中,最右边的小于等于k ...

  5. dfs实现数的全排列

    代码 #include<bits/stdc++.h> using namespace std; #define ll long long bool vis[15]; int a[15]; ...

  6. 在IDEA中配置Spring的XML装配

    不考虑混合模式的话,Spring有三类装配Bean的方法,自动装配和Java代码装配都会很容易上手,但在弄XML装配时遇到了问题,这与IDEA环境有关. 装配时需要在源码中配置XML文件的位置,我看别 ...

  7. 自己实现数据结构系列三---Stack

    一.代码部分 1.定义接口 public interface Stack<E> { int getSize(); boolean isEmpty(); void push(E e); E ...

  8. Linux系统mysql使用(一)

    一.安装 sudo apt-get update #更新软件源 sudo apt-get install mysql-server #安装mysql 二.启动和关闭 service mysql sta ...

  9. c++ 单引号"字符串" 用法

    __int64 flag; //赋值超过4字节,编译错误 //flag = 'ABCDE'; //低于4字节,高位补 0 //flag = 'BCDE'; flag = 'A' << 24 ...

  10. [转帖]wifi 4G 和 蓝牙的区别

    作者:沈万马链接:https://www.zhihu.com/question/64739486/answer/225227838来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...