精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-06-18
最后修改:2010-06-18
先贴上代码吧, 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跑哪个方法为单元测试方法。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-07-05
lz,我也是跟你做了同样的扩展。但是我在用@Resource指定数据源名称时,总是在装配阶段报错,容器提示说找到了多个匹配的数据源,但是希望只有一个能匹配。
我是在eclipse中直接通过JUnit的环境运行测试脚本做实验的。请问这样重载父类方法是否对环境有什么要求?能贴个配置文件给我看看吗?谢谢! |
|
返回顶楼 | |
发表时间: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> |
|
返回顶楼 | |
发表时间:2010-07-06
我们数据源的配置还是有区别的。由于我们是JTA环境,所以在测试环境中使用XA数据源: <bean id="aDataSource" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm" /> <property name="driverName" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@192.168.1.2:15221:mic" /> <property name="user" value="xxx" /> <property name="password" value="xxx" /> </bean> 我觉得和数据源配置无关啊,我配一个数据源就是OK的。环境是JDK6+Spring2.5。 可能是我忽略了一些额外的配置,能把你xml文件中的其他基础配置贴出来对比一下吗?包括xml声明。可能我有小疏忽……不胜感激!
|
|
返回顶楼 | |
发表时间:2010-07-07
最后修改: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> |
|
返回顶楼 | |
发表时间:2010-07-08
哎,还是不行……xml配置中的唯一区别就是你多了个“byName”,不过我加了还是出错。我也没去深究了。自己重新实现一个AbstractTransactionalJUnit4SpringContextTests,修改了注入dataSource的方式: @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(); }
自己实现,做了如上的修改。然后再做一个为不同数据源做设置的基类,这个基类继承上文中的AbstractTransactionalJUnit4SpringContextTests: @ContextConfiguration public abstract class AbstractAServiceTests extends AbstractTransactionalJUnit4SpringContextTests { @Autowired @Qualifier("aDataSource") private DataSource dataSource; @Override public DataSource getDataSource() { return dataSource; } }
这样解决虽然麻烦了点,但是对写集成测试的程序员而言并不多做事情,而且代码也有灵活性。 |
|
返回顶楼 | |
浏览 8317 次