`
catastiger
  • 浏览: 138486 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

spring2.5 junit4.x单元测试实例

阅读更多

先贴上代码吧,

1.基础类,用于加载环境配置信息

package com.xxxx.xxx.oss.base;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * [Product]
 *     xxxxxxx
 * [Copyright]
 *     Copyright © 2010 xxxxxxx All Rights Reserved.
 * [FileName]
 *     BaseTest.java
 * [History]
 *     Version  Date      Author     Content
 *     -------- --------- ---------- ------------------------
 *     1.0.0    Jun 17, 2010   zengjr    最初版本
 */

/**
 * <b>Summary: </b> TODO Junit 基础类,加载环境 
 * <b>Remarks: </b> TODO 基础类
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/com/xxxx/xxxxx/xxxx/config/applicationContext-*.xml" })
public class BaseTest extends AbstractTransactionalJUnit4SpringContextTests {

	/**
	 * <b>Summary: </b> 复写方法 setDataSource
	 * 
	 * @param dataSource
	 * @see org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests#setDataSource(javax.sql.DataSource)
	 */
	@Override
	@Resource(name = "adminDataSource")
	public void setDataSource(DataSource dataSource) {
		// TODO Auto-generated method stub
		super.setDataSource(dataSource);
	}

}

 2.一个实例子类,代码如下

package com.xxxx.xxxx.xxxx.dao;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import com.xxxx.xxxx.xxxx.base.BaseTest;
import com.xxxx.xxxx.xxxxx.xxxx.UserSuspectDAO;

  /**
 * [Product]
 *     XXXXX
 * [Copyright]
 *     Copyright © 2010 XXXXX All Rights Reserved.
 * [FileName]
 *     UserSuspectDAOTest.java
 * [History]
 *     Version  Date      Author     Content
 *     -------- --------- ---------- ------------------------
 *     1.0.0    Jun 17, 2010   zengjr    最初版本
 */

/**
 * <b>Summary: </b>
 *      TODO 请在此处简要描述此类所实现的功能。因为这项注释主要是为了在IDE环境中生成tip帮助,务必简明扼要
 * <b>Remarks: </b>
 *        TODO 请在此处详细描述类的功能、调用方法、注意事项、以及与其它类的关系
 */
public class UserSuspectDAOTest extends BaseTest {
	@Autowired
	private UserSuspectDAO userSuspectDAO;
	
	@Before
	public void setUp() throws Exception{
		System.out.println("junit....");
	}
//
	@After
	public void tearDown() throws Exception{
	}
	@Test
	public void testupdateStatus(){
		System.out.println("junit....");
		userSuspectDAO.updateStatus(567);
		
	}
}

 

 常遇到的问题

(上面的重写了setDataSource 是因为在我的项目里有几个dataSource,前台,后台,微博,博客四个dataSource,所以我这要这样明确指定一下

public void setDataSource(DataSource dataSource) 

)

        1.No Jnuit tests found   或者

           The input type of the launch configuration does not exist

           解决办法,鼠标点中test(这个目录与src同级)右键build path--->user as source floder

        2.

java.lang.NoSuchFieldError: NULL
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:48)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:59)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:104)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at org.junit.internal.requests.ClassRequest.buildRunner(ClassRequest.java:33)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:28)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:26)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:24)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:40)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:30)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:445)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) 
 

           解决办法,由于JUNIT的JAR 包冲突,原来用的是junit-4.4.jar,下载替换成junit-4.8.1.jar就OK了

 

依赖包:spring-test.jar,junit-4.8.1.jar

加载配置:除上面这样的写法外还可以这样写,使用classpath:xxxx

            @ContextConfiguration(locations = { " classpath:xxxxx

代码里的@Autowired是自动注入bean。

代码里的@Test告诉junit跑哪个方法为单元测试方法。

 

 

分享到:
评论
5 楼 former 2010-07-08  
<p>哎,还是不行……xml配置中的唯一区别就是你多了个“byName”,不过我加了还是出错。我也没去深究了。自己重新实现一个AbstractTransactionalJUnit4SpringContextTests,修改了注入dataSource的方式:</p>
<pre name="code" class="java">@TestExecutionListeners({TransactionalTestExecutionListener.class})
@Transactional
public abstract class AbstractTransactionalJUnit4SpringContextTests extends AbstractJUnit4SpringContextTests implements
InitializingBean {
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(getDataSource());
this.simpleJdbcTemplate = new SimpleJdbcTemplate(getDataSource());
}
public abstract DataSource getDataSource();
}</pre>
<p> </p>
<p>自己实现,做了如上的修改。然后再做一个为不同数据源做设置的基类,这个基类继承上文中的AbstractTransactionalJUnit4SpringContextTests:</p>
<pre name="code" class="java">@ContextConfiguration
public abstract class AbstractAServiceTests extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
@Qualifier("aDataSource")
private DataSource dataSource;
@Override
public DataSource getDataSource() { return dataSource; }
} </pre>
<p> </p>
<p>这样解决虽然麻烦了点,但是对写集成测试的程序员而言并不多做事情,而且代码也有灵活性。</p>
4 楼 catastiger 2010-07-07  
其它的真没什么变化了,现在把声明部分也粘 一下吧
<?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:aop="http://www.springframework.org/schema/aop"
	   xmlns:tx="http://www.springframework.org/schema/tx"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
	   default-autowire="byName" default-lazy-init="false">

	<!-- 属性文件读入,使用rapid中的JdbcPlaceholderConfigurer则可以从数据库读取配置信息 -->
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath*:jdbc.properties</value>
			</list>
		</property>
	</bean>	


3 楼 former 2010-07-06  
<p>我们数据源的配置还是有区别的。由于我们是JTA环境,所以在测试环境中使用XA数据源:</p>
<pre name="code" class="xml">&lt;bean id="aDataSource" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"&gt;
&lt;property name="transactionManager" ref="jotm" /&gt;
&lt;property name="driverName" value="oracle.jdbc.driver.OracleDriver" /&gt;
&lt;property name="url" value="jdbc:oracle:thin:@192.168.1.2:15221:mic" /&gt;
&lt;property name="user" value="xxx" /&gt;
&lt;property name="password" value="xxx" /&gt;
&lt;/bean&gt; </pre>
<p> 我觉得和数据源配置无关啊,我配一个数据源就是OK的。环境是JDK6+Spring2.5。</p>
<p>可能是我忽略了一些额外的配置,能把你xml文件中的其他基础配置贴出来对比一下吗?包括xml声明。可能我有小疏忽……不胜感激!</p>
<p> </p>
2 楼 catastiger 2010-07-06  
在没有@Resource指定数据源时候我也报过多过数据源的问题,加上去就好了,不知道兄台为什么还会出现这样的错误!
下面是我的配置
	
   <bean id="ibatis2DataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${jdbc.twioo.driver}"/>
		<property name="url" value="${jdbc.twioo.url}"/>
		<property name="username" value="${jdbc.twioo.username}"/>
		<property name="password" value="${jdbc.twioo.password}"/>
	</bean>
	
	<!-- 数据源定义,使用Apache DBCP 连接池 -->
	<bean id="adminDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${jdbc.admin.driver}"/>
		<property name="url" value="${jdbc.admin.url}"/>
		<property name="username" value="${jdbc.admin.username}"/>
		<property name="password" value="${jdbc.admin.password}"/>
	</bean>
	
	<!-- 数据源定义,使用Apache DBCP 连接池 -->
	<bean id="blogDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${jdbc.blog.driver}"/>
		<property name="url" value="${jdbc.blog.url}"/>
		<property name="username" value="${jdbc.blog.username}"/>
		<property name="password" value="${jdbc.blog.password}"/>
	</bean>

1 楼 former 2010-07-05  
lz,我也是跟你做了同样的扩展。但是我在用@Resource指定数据源名称时,总是在装配阶段报错,容器提示说找到了多个匹配的数据源,但是希望只有一个能匹配。
我是在eclipse中直接通过JUnit的环境运行测试脚本做实验的。请问这样重载父类方法是否对环境有什么要求?能贴个配置文件给我看看吗?谢谢!

相关推荐

    Spring2.5-中文参考手册chm.zip

    8. **测试支持**:Spring 2.5提供了更完善的测试工具,如`@RunWith(SpringJUnit4ClassRunner.class)`和`@ContextConfiguration`注解,使得基于Spring的应用测试更加便捷。 9. **集成其他框架**:Spring 2.5加强了与...

    Spring2.5.rar

    5.测试支持:Spring 2.5提供了JUnit和Mockito的集成,便于进行单元测试和集成测试。 总结,Spring 2.5作为Spring框架的一个重要里程碑,它的改进和特性为Java开发者带来了更加高效、灵活的开发体验。通过深入理解并...

    Spring 2.5 TestContext

    - `@RunWith(SpringJUnit4ClassRunner.class)`:这是JUnit测试类必须的注解,它告诉JUnit使用Spring提供的测试运行器来执行测试。 - `@ContextConfiguration`:用于指定配置文件的位置或加载ApplicationContext的...

    junit+hibernate3.2+spring2.5工程

    在本工程中,我们可以看到如何设置Junit测试类,对Spring和Hibernate的集成功能进行验证。 2. Hibernate3.2:作为一款强大的对象关系映射(ORM)框架,Hibernate3.2简化了数据库操作,使得开发者可以使用Java对象而...

    spring2.5中文参考手册

    6. **单元测试**:Spring支持JUnit和TestNG进行单元测试,提供了方便的测试工具,如`@RunWith(SpringJUnit4ClassRunner.class)`和`@ContextConfiguration`注解,可以方便地创建和管理测试环境。 7. **国际化支持**...

    spring2.5常用到的jar包

    12. **spring-test.jar**:用于测试Spring应用,提供了测试上下文框架和JUnit集成,方便进行单元测试和集成测试。 以上是Spring 2.5中常见的jar包,它们共同构成了Spring框架的强大功能。然而,值得注意的是,...

    Spring+hibernate 单元测试

    Spring 2.5 的 TestContext 测试框架为开发人员提供了一种更为简洁、灵活的方式来编写和组织单元测试。通过使用注解来配置测试逻辑,可以极大地提高测试代码的可读性和可维护性。同时,结合 Hibernate 进行数据库...

    spring2.5 api以及源代码

    9. **测试支持**:Spring提供了丰富的测试工具和框架,如Spring Test和JUnit集成,方便进行单元测试和集成测试。 10. **JSR-303支持**:Spring 2.5引入了对JSR-303标准的验证框架的集成,简化了Java Bean的验证过程...

    Spring测试框架.rar

    Spring测试框架是Spring生态系统中的重要组成部分,它为开发者提供了对Spring应用进行单元测试、集成测试以及端到端测试的强大支持。这个压缩包“Spring测试框架.rar”包含了与使用Spring 2.5 TestContext测试框架...

    Spring 2.5 开发手册

    在测试方面,手册提供了关于单元测试和集成测试的指导,包括使用JUnit、Mockito等工具,以及Spring的TestContext框架,帮助开发者编写高质量的测试代码,确保软件的稳定性和可靠性。 最后,手册还包含了一些最佳...

    整合Struts2,Spring2.5,Hibernate3.3操作参考

    7. **测试**:编写JUnit测试用例,验证整合是否成功。 **最佳实践** - 使用注解来减少XML配置,提高代码可读性。 - 利用Spring的AOP进行事务管理,保证数据一致性。 - 使用Spring的Data Access Objects(DAO)和...

    Struts1.2+Spring2.5+Hibernate3.2框架搭建(一)

    5. 测试和运行:通过JUnit进行单元测试,确保各层功能正常,然后部署应用,测试整个流程是否顺畅。 这个框架组合的优点在于,Struts处理用户请求,Spring管理业务逻辑和服务,Hibernate处理数据持久化,三者分工...

    spring 2.5 注解

    6. **测试框架支持**:Spring 2.5对JUnit4的支持使得测试更加便捷,允许开发者使用注解来配置测试环境。 7. **Spring XML命名空间的扩展**:Spring 2.5添加了许多新的XML命名空间,提供了更多配置选项,如数据源...

    Spring.3.x企业应用开发实战(完整版).part2

    17.5.4 编写BoardDao测试用例 17.6 服务层开发 17.6.1 UserService的开发 17.6.2 ForumService的开发 17.6.3 服务类Bean的装配 17.7 对服务层进行测试 17.7.1 编写Service测试基类 17.7.2 编写ForumService测试用例 ...

    CRM完整版 spring2.5注解+hibernate3.0

    "CRM完整版 spring2.5注解+hibernate3.0"是一个专为中级程序员设计的项目,旨在帮助他们深入理解和应用Spring 2.5版本的注解以及Hibernate 3.0 ORM框架。 Spring 2.5是Spring框架的一个里程碑版本,它引入了大量的...

    Spring2.5+Struts1.3.8+Hibernate3.0整合

    ### Spring2.5 + Struts1.3.8 + Hibernate3.0 整合知识点详解 #### 一、概述 Spring2.5 + Struts1.3.8 + Hibernate3.0 (简称SSH)整合是一种典型的Java Web开发模式,旨在通过组合这三种技术框架来构建高性能、易于...

    Spring2.5 + JPA(Hibernate)实现

    标题 "Spring2.5 + JPA(Hibernate)实现" 指的是在Spring框架的2.5版本中集成Java Persistence API (JPA) 和Hibernate ORM框架来管理数据库操作。这通常涉及利用Spring的IoC(Inversion of Control)和AOP(Aspect ...

    SSI框架实现增删改查(spring2.5 + struts2.1 + ibatis2.3)

    9. **测试**:编写Junit测试用例,覆盖业务逻辑和DAO层的方法,确保功能的正确性。 通过这样的整合,开发者可以享受到各框架的特性,比如Spring的依赖注入,Struts的MVC处理,以及iBatis的灵活数据库操作,从而提高...

    Spring3.x企业应用开发实战(完整版) part1

    17.5.4 编写BoardDao测试用例 17.6 服务层开发 17.6.1 UserService的开发 17.6.2 ForumService的开发 17.6.3 服务类Bean的装配 17.7 对服务层进行测试 17.7.1 编写Service测试基类 17.7.2 编写ForumService测试用例 ...

Global site tag (gtag.js) - Google Analytics