在写单元测试的时候,一般是对数据库进行增删改查的操作,这个时候,如果之前删除了某条记录,自然后面的程序就找不到这条记录了,所以可以通过配置spring的事务管理或者测试框架来回滚,减少工作量。使用的数据库是postgreSQL和mysql。
在写这篇文章的时候,很多地方借鉴了下面两篇文章:
http://www.cnblogs.com/rainisic/archive/2012/01/22/Spring_Test_Framework.html
http://blog.163.com/wf_shunqiziran/blog/static/17630720920121084325322/
1、创建测试类
创建一个测试用的类,推荐名称为 “被测试类名称 + Test”。
测试类应该继承与 AbstractJUnit4SpringContextTests 或 AbstractTransactionalJUnit4SpringContextTests
对于 AbstractJUnit4springcontextTests 和 AbstractTransactionalJUnit4SpringContextTests 类的选择:
如果再你的测试类中,需要用到事务管理(比如要在测试结果出来之后回滚测试内容),就可以使用AbstractTransactionalJUnit4SpringTests类。事务管理的使用方法和正常使用Spring事务管理是一样的。再此需要注意的是,如果想要使用声明式事务管理,即使用AbstractTransactionalJUnitSpringContextTests类,请在applicationContext.xml文件中加入transactionManager bean:
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
如果没有添加上述bean,将会抛出NoSuchBeanDefinitionException,指明 No bean named 'transactionManager' is definded.
2. 配置测试类
添加如下内容在class前,用于配置applicationContext.xml文件的位置。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
3. 创建测试方法
创建测试用方法,推荐名称为 “被测方法名称+ Test”。
测试方法上方加入 @Test
4、 通过JUnit 4 执行
右键方法名,选择则“Run As”→“JUnit Test”即可
我以前也是通过这种方法来配置单元测试的自动回滚的,不过在新的项目里发现不行,于是又是各种度娘谷哥,终于找到了。顺便说下我搜索到的不能自动回滚的集中原因:
1、代码中含有try-catch块导致不能回滚。(个人觉得不靠谱)
2、方法里面有非public方法。
3、加载了2次配置文件,导致insert和rollback方法不在一个事物里面。我遇到的就是这种情况。
如:我在注解当中已经加载了一次applicationContext.xml文件,而在setUp()里面又加载了一次,导致方法被当成2个事物提交了。于是我使用注解来加载bean。
- @Autowired
- private AppointmentDao appointmentDao;
单元测试用例上面的注解是:
- @RunWith(SpringJUnit4ClassRunner.class)
- @TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)
- @Transactional
- /**读取配置文件到运行环境。注意:file的路径 */
- @ContextConfiguration(locations={"classpath:applicationContext.xml"})
在applicationContext.xml文件当中:
- <bean id="txManager"
- class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource" />
- </bean>
相关推荐
Spring Boot 中 JUnit 回滚机制详解 在本篇文章中,我们将详细介绍 Spring Boot 中 JUnit 回滚机制的实现原理和使用方法。通过阅读本文,您将了解到如何在 Spring Boot 项目中使用 JUnit 编写单元测试,并且测试...
"Transactional:Spring事务性Junit测试"是一个关于如何在JUnit测试中利用Spring的事务管理特性的主题。 首先,让我们理解Spring中的事务管理。Spring提供了一种声明式和编程式的事务管理方式。声明式事务管理通过在...
6. **测试与调试**:在"Spring事务小demo"项目中,可以编写JUnit测试类来验证事务的正确性。测试类中,使用@Test注解并配置@Test rollback属性,可以确保每次测试结束后,事务都会被回滚,保持数据库的原始状态。 ...
本实践项目旨在深入理解Spring如何整合JDBC进行数据库操作,以及如何利用JUnit进行单元测试,同时探讨了事务管理在银行业务中的重要性。我们将通过一个简单的银行转账案例,详细讲解这些技术的应用。 首先,Spring...
Spring框架提供了丰富的功能,包括依赖注入、AOP(面向切面编程)、事务管理等,而JUnit则帮助开发者编写和运行针对单个方法的测试。 描述中的链接指向了一篇名为“Spring 2.5+Junit4的单元测试”的博客文章,虽然...
集成了Spring 3.2.2 Hibernate 3.3.2 Struts 2.3.4 用JPA的注解实现orm 不用创建数据库表 只需本机上有oracle即可 用JSR注解进行Spring的...用Spring Test整合Junit4 进行测试并自动事务回滚 不对数据库造成持久化操作
本练习主要涵盖了Spring的三个方面:面向切面编程(AOP)、JDBC(Java Database Connectivity)以及事务管理(TX)。让我们详细探讨这些知识点。 1. **Spring AOP(面向切面编程)** 面向切面编程是Spring框架的一...
Spring事务管理器会自动处理开始事务、提交事务、回滚事务等操作,极大地简化了事务处理的复杂性。 4. 反射工具类(Reflection Utility Class): Java反射API允许程序在运行时动态地获取类的信息并操作类的对象。...
8. **AOP代理测试**: Spring Test模块提供了`@Rollback`和`@DirtiesContext`注解,前者用于在测试后自动回滚事务,后者标记测试可能污染了上下文,需要在下次测试前重新加载。 9. **AssertJ和Hamcrest**: Spring ...
4. **Spring的回滚规则**:默认情况下,只有当受管理的bean方法抛出未检查异常(继承自RuntimeException的异常)时,事务才会回滚。如果需要对受检查异常(继承自Exception的非RuntimeException)也进行回滚,可以在...
例如,确保在发生错误时,事务能够正确回滚。此外,Spring的@TestTransactional注解可以帮助我们在单个测试方法中开启和提交事务,这对于测试业务层的事务性行为非常有用。 总结来说,使用JUnit针对Spring MVC的三...
测试方法将在一个事务中运行,完成后回滚,防止数据污染。 ```java @Test @Transactional public void testDatabaseOperation() { // 执行数据库操作 // 验证操作结果 } ``` 通过以上步骤,我们可以对Spring的...
总的来说,Spring 3和Hibernate 4结合使用声明式事务管理,使得我们无需在代码中显式调用事务开始、提交和回滚,而是通过注解和配置文件来声明事务的边界和行为。这种方式降低了代码的复杂度,提高了可维护性和可...
Spring事务管理是其核心功能之一,它提供了一种在多层架构中维护数据一致性的机制。事务控制涉及到ACID(原子性、一致性、隔离性和持久性)属性,确保了数据库操作的完整性和可靠性。在Spring中,事务管理有两种方式...
这需要对 `Spring` 的依赖注入、`Hibernate` 的事务管理以及 `JUnit` 的测试机制有深入理解,并熟练运用各种测试工具和技巧。通过这样的测试实践,我们可以更好地维护代码,减少因数据层错误导致的问题,提高整体...
- 编写JUnit测试类,模拟多数据源事务场景,确保在回滚或提交时,两个数据库的状态一致。 通过以上步骤,我们可以成功地在Spring Boot应用中实现基于JTA的多数据源事务管理。在实际应用中,还需要考虑并发、隔离...
Spring的测试支持包括模拟对象、事务管理以及对IoC容器的控制,这使得开发者可以在不启动整个应用程序的情况下对单个组件进行单元测试。例如,你可以使用`@RunWith(SpringRunner.class)`注解来运行一个Spring支持的...
Spring Test可以自动管理测试的事务,`@Transactional`注解可用于确保每个测试方法都在一个新的事务中运行,测试结束后,事务会自动回滚,保持数据库的一致性。 8. **异步测试** 对于处理异步任务的测试,Spring...
同时,Spring的声明式事务管理使得事务边界清晰,易于维护。源代码可能会有相应的事务配置和事务回滚处理。 5. **Spring Data JPA与ORM**:如果涉及JPA(Java Persistence API),源码可能会展示如何配置Repository...
5. **测试**:通过创建测试用例,检查事务的正确提交和回滚,验证JOTM和Spring的事务管理是否正常工作。 **项目结构**: "springmvctest"这个文件名可能是项目的主要源代码目录,里面可能包含了以下文件和目录: - ...