junit4和spring test测试之AbstractTransactionalJUnit4SpringContextTests详解
来源:互联网 发布:淘宝看数据的插件 编辑:程序博客网 时间:2024/06/03 18:17
使用Spring TestContext Framework对程序进行单元测试有两种方式,一种是测试类继承AbstractJUnit4SpringContextTests或继承AbstractTransactionalJUnit4SpringContextTests,并且使用@ContextConfiguration注解来指定配置文件的位置,如果不置顶配置文件的位置的话,它会默认测试目标类的全限名加上"-context.xml"(eg: com.sch.services.UserService默认的配置文件为:classpath:com/sch/services/UserService-context.xml).
先来看一下AbstractJUnit4SpringContextTests和AbstractTransactionalJUnit4SpringContextTests的原型,了解两者的区别:
AbstractJUnit4SpringContextTests:
AbstractTransactionalJUnit4SpringContextTests:
可以看出AbstractTransactionalJUnit4SpringContextTests 是继承于AbstractJUnit4SpringContextTests 并增加了一个TransactionalTestExecutionListener监听器,可见AbstractTransactionalJUnit4SpringContextTests 增加了测试类对事物的控制,可见测试类可以使用注解也可以使用继承抽象类。
接下来看一下3个监听器的作用:
DependencyInjectionTestExecutionListener提供了依赖注入的功能,它负责解析测试类中的@Autowried和@Resource注解
DirtiesContextTestExecutionListener只要的作用是处理测试类中的上下文遭到破坏时,重新注册上下文,即在测试方法上使用@DirtiesContext启用;当测试方法被@DirtiesContext注解修饰时,当测试方法结束的时候,Spring TestContext会刷新Spring的上下文(就是重新创建ApplicationContext)。
TransactionalTestExecutionListener主要负责解析和事物操作有关的注解,例如:@Transaction、@BeforeTransaction、@AfterTransaction、@NotTransactional 以及 @Rollback。
下面来看一下测试相关注解的简单说明:
@TransactionConfiguration使用在类级别上,里面有两个属性,transactionManager 指定事物管理器的名字,默认的名称为:transactionManager;defaultRollback 配置全局默认的事务回滚,默认为:false。
@BeforeTransaction和@AfterTransaction可见是在需要事物的测试方法执行前后调用,和JUnit4中@Before、@After注解类型,当时前者会忽略声明了@NotTransactional注解的测试方法。
@NotTransactional修饰那些不需要事物的测试方法。
@Rollback可以改变测试方法的回滚方式,例如@Rollback(true)可以是测试方法的事物设置为执行完后事物马上回滚。
还有一些注解的使用方法可以参考Spring Reference。
先来看一下AbstractJUnit4SpringContextTests和AbstractTransactionalJUnit4SpringContextTests的原型,了解两者的区别:
AbstractJUnit4SpringContextTests:
- @RunWith(SpringJUnit4ClassRunner.class) //指定测试用例运行器
- @TestExecutionListeners( // 注册了两个TestExecutionListener监听器
- { DependencyInjectionTestExecutionListener.class,
- DirtiesContextTestExecutionListener.class })
- public class AbstractJUnit4SpringContextTests implements ApplicationContextAware {
- …
- }
AbstractTransactionalJUnit4SpringContextTests:
- // 注册测试用例事务管理的监听器
- @TestExecutionListeners( { TransactionalTestExecutionListener.class })
- @Transactional // 使测试用例的所有方法都将工作于事务环境下
- public class AbstractTransactionalJUnit4SpringContextTests
- extends AbstractJUnit4SpringContextTests {
- …
- }
可以看出AbstractTransactionalJUnit4SpringContextTests 是继承于AbstractJUnit4SpringContextTests 并增加了一个TransactionalTestExecutionListener监听器,可见AbstractTransactionalJUnit4SpringContextTests 增加了测试类对事物的控制,可见测试类可以使用注解也可以使用继承抽象类。
接下来看一下3个监听器的作用:
DependencyInjectionTestExecutionListener提供了依赖注入的功能,它负责解析测试类中的@Autowried和@Resource注解
DirtiesContextTestExecutionListener只要的作用是处理测试类中的上下文遭到破坏时,重新注册上下文,即在测试方法上使用@DirtiesContext启用;当测试方法被@DirtiesContext注解修饰时,当测试方法结束的时候,Spring TestContext会刷新Spring的上下文(就是重新创建ApplicationContext)。
TransactionalTestExecutionListener主要负责解析和事物操作有关的注解,例如:@Transaction、@BeforeTransaction、@AfterTransaction、@NotTransactional 以及 @Rollback。
下面来看一下测试相关注解的简单说明:
@TransactionConfiguration使用在类级别上,里面有两个属性,transactionManager 指定事物管理器的名字,默认的名称为:transactionManager;defaultRollback 配置全局默认的事务回滚,默认为:false。
@BeforeTransaction和@AfterTransaction可见是在需要事物的测试方法执行前后调用,和JUnit4中@Before、@After注解类型,当时前者会忽略声明了@NotTransactional注解的测试方法。
@NotTransactional修饰那些不需要事物的测试方法。
@Rollback可以改变测试方法的回滚方式,例如@Rollback(true)可以是测试方法的事物设置为执行完后事物马上回滚。
还有一些注解的使用方法可以参考Spring Reference。
1 0
- junit4和spring test测试之AbstractTransactionalJUnit4SpringContextTests详解
- spring中JUnit4测试中,AbstractTransactionalJUnit4SpringContextTests报错关于javax.sql.DataSource
- junit4 (三)和spring-test结合使用
- Spring Test 整合JUnit4
- spring-test结合junit4
- 基于spring-test/junit4的测试用例
- 【项目实战】使用Spring Test+Junit4整合进行测试
- JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试
- JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试
- Junit 测试之 Spring Test
- junit4测试service-spring
- spring junit4 注解测试
- 使用JUnit4测试Spring
- 使用JUnit4测试Spring
- Spring整合Junit4测试
- Junit4测试Spring注入
- Junit4+spring测试类
- JUNIT4 spring hibernate 测试
- 第一部分:An Introduction to 3D Rendering
- 深度学习(三十八)卷积神经网络入门学习(2.0)
- Android App性能优化步骤及电量优化与service优化
- C++中如何对单向链表操作
- JAVA中的注解(Annotation)
- junit4和spring test测试之AbstractTransactionalJUnit4SpringContextTests详解
- [JZOJ4512][JSOI2016]最佳团队
- ARM基础系列——ARM指令集
- HDU2014 青年歌手大奖赛_评委会打分
- 数据结构之数组
- find和ls文件查找
- 在Eclipse中使用JUnit4进行单元测试(初级篇)
- 第一章:Introducing DirectX
- acm之递归题目5