使用junit进行Spring测试

这几天在做SpringMVC的项目,现在总结一下在测试的时候碰到的一些问题。

以前做项目,是在较新的MyEclipse(2013)上面进行Maven开发,pom.xml 文件是直接复制的,做测试的时候都是比较顺利的。然而这次,是在Myeclipse 8.5 上面开发,用的是JavaEE5,在测试的时候,就碰到了不少问题,有时候快被搞死!

一般来说,我们给测试类单独一个包,同时给spring一份测试的配置文件(复制production的配置文件,删除不用的组件,如 shiro,ehcache等暂时用不到的)。

我用到的组件版本:

Spring 4.0.6
Hibernate 4
junit 4.8.2

注意,进行注解形式的spring-test,需要引入spring-test-4.0.6.RELEASE.jar

接着,开始别写测试类,这里用一个汽车实体的DAO做例子

首先是Car.java,简单起见,Car就只有name属性。

测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:test/root-context.xml" })
@Transactional(readOnly=false)
public class TestCarDao {
	@Autowired
	private CarDao dao;

	@Test
	public void test(){
		Car c = new Car();
		c.setName("0--0-----00--");

		dao.save(c);
	}
}

可以看到,使用注解来配置junit还是很方便的。

使用 junit 运行测试类,一开始出现了:java.lang.NoClassDefFoundError: Ljavax.persistence.ForeignKey() 的错误

经排查,发现时javaEE5 的javaee.jar 没有ForeignKey 这个注解。

这时,可以配置一些junit的运行环境,删除javaEE5的引用,如下图所示:

再次运行,如果出现找不到servlet.**** 类的错误,那么可以加入自己的 servlet.api.jar 到项目class path中。

我用的是 :servlet-api-2.5.jar

现在test运行正常。

spring test 是默认事务回滚的,就是说在test中进行的数据库操作,都不会对真实的数据有影响(除了表结构的update操作),这时,如果需要对数据进行修改,可以取消spring 的回滚,在test方法上加入以下注解:

  1. @Rollback(false)
时间: 2024-10-14 07:53:02

使用junit进行Spring测试的相关文章

spring && Cobertura && maven &&junit 单元测试以及测试覆盖率

1. 目的: junit 单元测试,Cobertura   测试覆盖率报告 项目目录结构 2. maven 配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://mave

Spring测试框架JUnit搭建测试环境 不通过web服务器 初始化spring bean对象

直接使用 JUnit 测试 Spring 程序存在的不足 需要使用硬编码方式手工获取 Bean:在测试用例中,我们需要通过 ApplicationContext.getBean() 的方法从 Spirng 容器中获取需要测试的目标 Bean,并且还要进行造型操作. 数据库现场容易遭受破坏:测 试方法可能会对数据库记录进行更改操作,破坏数据库现场.虽然是针对开发数据库进行测试工作的,但如果数据操作的影响是持久的,将会形成积累效应并影响到 测试用例的再次执行.举个例子,假设在某个测试方法中往数据库插

junit常用及junit联合spring

@BeforeClass作用于类 对于类中所有方法执行一次 属性要声明为静态的 @Before作用于方法 对于每一个测试方法都要执行一次@Test加入测试 junit顺序问题,按照字母排序执行.若要有序执行,可使用TestNG,TestNG可添加依赖 junit联合spring @RunWith(SpringJUnit4ClassRunner.class) //spring和junit的连接 @ContextConfiguration({"classpath:/spring/applicatio

Spring 测试

测试是开发工作中必不可缺的部分.单元测试只针对当前开发的类和方法进行测试,可以简单通过模拟依赖来实现,对运行环境没有依赖:但是仅仅进行单元测试是不够的,它只能验证当前类或方法能否正常工作,而我们想要知道系统的各个部分组合一起是否能正常工作,这就是集成测试存在的意义. 集成测试一般需要来自不同层的不同对象的交互,如数据库.网络连接.Ioc容器等.其实我们也经常通过运行程序,然后通过自己操作来完成类似于集成测试的流程.集成测试为我们提供了一种无须部署或运行程序来完成验证系统各部分是否能正常协作工作的

最“高大上”的Spring测试:Spring Test

我想给大家介绍一款非常实用.且高端大气上档次的spring测试,在这里,我要强烈推荐使用Spring的Test Context框架,为什么呢?俗话说,"货比三家不上当",要搞清楚这个问题,我们先来看一看传统的Spring测试: 传统的Spring测试 我们开发一个Spring的HelloWorld. 第一步:准备开发Spring依赖的jar包 第二步:定义一个简单的POJO类:HelloWorld,如下: 第三步:阅读Spring中帮助文档(xsd-config.html),编写配置文

Spring入门(二)— IOC注解、Spring测试AOP入门

一.Spring整合Servlet背后的细节 1. 为什么要在web.xml中配置listener <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> 配置listener主要是为了捕获项目发布 | 服务器启动的契机 ,为了解析xml , 创建工厂. 这个listener是spring官方提供

Junit/idea Junit支持/Spring test之间的孽世纠葛

最近应老板要求,研究研究Spring测试相关的东西,力求搞一个方便使用的测试工具,对于一个Spring不熟Junit不懂的人这是一个很大的坑,扫了一边spring test文档没感觉有什么收获,spring做的只是跟它上下文相关的东西,而我要的主要入口是Junit的东西,于是今天又把Junit4的wiki扫了一边,发现了很多让人眼前一亮的功能,整体感受是Junit很会包容,整合了很多别人好的idea(比如assert整合了hamcrest让结果比较代码更加易读和易写,测试用例生成参照了Poppe

spring测试父类,使用junit-4.4.jar,spring-test.jar

@ContextConfiguration(locations = "classpath:conf/applicationContext.xml") @RunWith(SpringJUnit4ClassRunner.class) @Transactional @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) public abstr

JUnit之参数化测试和成组测试的使用

JUnit之参数化测试和成组测试的简单使用 参数化测试 正如数组替代int a0,a1,a2一样,测试加法时assertEquals(3.0, h.add(1, 2), 0.1);相当于声明一个变量,要测试100个怎么办. 所以,有了参数化测试,使用一个Collection收集所有的数据--加法时每一次测试需要的几个数据构成一组,n个组构成Collection. 然后按照JUnit的用法要求,写出单元测试类.(偷懒一下,不想写被测试的业务类X了.下面的例子中假设要测试的方法是,判断一个数是否奇数