spring junit

转载自 http://blog.csdn.net/funi16/article/details/8691575

在写单元测试的时候,一般是对数据库进行增删改查的操作,这个时候,如果之前删除了某条记录,自然后面的程序就找不到这条记录了,所以可以通过配置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。

[java] view plain copy

  1. @Autowired
  2. private AppointmentDao appointmentDao;

单元测试用例上面的注解是:

[java] view plain copy

  1. @RunWith(SpringJUnit4ClassRunner.class)
  2. @TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)
  3. @Transactional
  4. /**读取配置文件到运行环境。注意:file的路径 */
  5. @ContextConfiguration(locations={"classpath:applicationContext.xml"})

在applicationContext.xml文件当中:

[java] view plain copy

  1. <bean id="txManager"
  2. class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  3. <property name="dataSource" ref="dataSource" />
  4. </bean>
时间: 2024-07-28 15:28:32

spring junit的相关文章

spring junit 做单元测试,报 Failed to load ApplicationContext 错误

spring junit 做单元测试,报 Failed to load ApplicationContext 错误. 查找了好一会,最后发现.@ContextConfiguration(locations = { "classpath:/spring/applicationContext.xml","classpath:/spring/app-config.xml", …… 改成 @ContextConfiguration(locations = { "c

spring junit jpa transaction

package com.fengshu.gotian.applicationImpl; import java.util.List; import javax.annotation.Resource; import org.apache.log4j.Logger; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration;

spring+junit单元测试

<1>读取文件: 配置文件在classes下:locations = {"classpath*:/spring/applicationContext.xml"} 配置文件在web-inf下:locations = {"file:web/WEB-INF/applicationContext.xml"} <2>实例类: package com.test; import java.util.List; import org.junit.Test;i

idea下maven项目下spring junit 测试用例

使用idea在编写的类下右键Go->Test或者ctrl+shift+t,点击create new test会在相应目录下创建test类 别写代码如下 @RunWith(value = SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:/config/**/applicationContext*.xml" }, loader = GenericXmlContextLoader

maven+spring+junit测试要注意的事情

使用maven方式创建webapp工程的资料网上一大堆,在这里也不详细说了.在创建完成之后,里面说到要转动态web工程时要切换为3.0版本,但是我本地切换不了,网上的方法好像也没用,暂时也没用到这块.等SSM框架搭建好了之后再细说这块.今天要说的是之前按照网上一个教程搭建SSM框架时遇到的针对spring针对junit单元测试的坑,因为涉及到maven的版本管理,一直没跳出来.昨天下午给解决了.有可能别的eclipse或者其他环境不会遇到这问题,但这里我还是要提醒一下.按照以下教程https:/

Spring Junit 读取WEB-INF下的配置文件

假设Spring配置文件为applicationContext.xml 一.Spring配置文件在类路径下面 在Spring的java应用程序中,一般我们的Spring的配置文件都是放在放在类路径下面(也即编译后会进入到classes目录下). 以下是我的项目,因为是用maven管理的,所以配置文件都放在“src/main/resources”目录下 这时候,在代码中可以通过 [java] view plaincopy ApplicationContext applicationContext 

Spring Junit集成测试

例子如下: package com.junge.demo.spring; import static org.junit.Assert.assertEquals; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework

Solved:Spring Junit Test NoSuchMethodError

最近在看Spring in action这本书,在Ubuntu上配好了环境开始开发,没想到做了第二章的第一个例子就遇到了一个错误. 首先我在src/main/java文件夹下的controller包内建了一个test类CDPlayerTest,然后提示无法解析ContextConfiguration和SpringJUnit4ClassRunner.根据IDEA提示,我选择了add library org.springframework to classpath. 然后一切看起来都很顺利,心情舒畅

spring测试junit事务管理及spring面向接口注入和实现类单独注入(无实现接口),实现类实现接口而实现类单独注入否则会报错。

1.根据日志分析,spring junit默认是自动回滚,不对数据库做任何的操作. 18:16:57.648 [main] DEBUG o.s.j.d.DataSourceTransactionManager - Switching JDBC Connection [[email protected]] to manual commit 18:16:57.649 [main] DEBUG o.s.t.c.t.TransactionalTestExecutionListener - No meth