论坛首页 Java企业应用论坛

spring单元测试很简单?吐血

浏览 17826 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2004-12-09  
:(
我在web-inf下有个bean的配置片段
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/WEB-INF/persist/jdbc.properties</value>
</list>
</property>
</bean>
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>/WEB-INF/persist/sqlMapConfig.xml</value>
</property>
</bean>

如果单元测试
使用
FileSystemXmlApplicationContext(locs)获得ApplicationContext,但是上面配置片段中的路径会找不到.
   发表时间:2004-12-09  
使用ClassPath去获得ApplicationContext, locations也采用classpath去获得jdbc.properties, 懒得去搞什么FileSystem path了......
0 请登录后投票
   发表时间:2004-12-09  
alin_ass 写道

如果单元测试
使用
FileSystemXmlApplicationContext(locs)获得ApplicationContext,但是上面配置片段中的路径会找不到.


这跟单元测试有什么关系?这是个环境配置问题,是属于冒烟测试的范畴。你连Spring的环境都还没配好,程序还在冒着黑烟,哪里谈得上单元测试?
0 请登录后投票
   发表时间:2004-12-09  
我去试下,您有现成的测试代码吗?
我的结构是这样的
webapp
|
|--web-inf
.....|---bean1.xml
.....|---bean2.xml
.....|---bean3.xml
.....|---classes
................|---MyTestCase1.class
0 请登录后投票
   发表时间:2004-12-09  
gigix 写道
alin_ass 写道

如果单元测试
使用
FileSystemXmlApplicationContext(locs)获得ApplicationContext,但是上面配置片段中的路径会找不到.


这跟单元测试有什么关系?这是个环境配置问题,是属于冒烟测试的范畴。你连Spring的环境都还没配好,程序还在冒着黑烟,哪里谈得上单元测试?


web app一切正常, 就是我没法用同一套bean配置文件进行测试
0 请登录后投票
   发表时间:2004-12-09  
可是单元测试你不需要通过ApplicationContext去获得对象。直接把你需要的bean new出来,把它的属性set进去,测就行了。
0 请登录后投票
   发表时间:2004-12-09  
gigix 写道
可是单元测试你不需要通过ApplicationContext去获得对象。直接把你需要的bean new出来,把它的属性set进去,测就行了。


,要手动啊,5~~
0 请登录后投票
   发表时间:2004-12-09  
alin_ass 写道
我去试下,您有现成的测试代码吗?
我的结构是这样的
webapp
|
|--web-inf
.....|---bean1.xml
.....|---bean2.xml
.....|---bean3.xml
.....|---classes
................|---MyTestCase1.class


把你的bean.xml移到classpath下面(classes目录),比如com.javaeye这个package下面。

那么web.xml里面可以这样写:
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:/com/javaeye/bean1.xml,
            classpath:/com/javaeye/bean2.xml
        </param-value>
    </context-param>


单元测试用ClassPathXmlApplicationContext

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] {"com/javaeye/bean1.xml", "com/javaeye/bean2.xml"});;


那些jdbc property和ibatis mapping文件的location也可以写成
classpath: xxx.properties

这样的好处是可以打一个jar包就把所有的东东就包含进去了......
0 请登录后投票
   发表时间:2004-12-09  
:idea: 又学了一招
但是按照我的目录,配置文件放外部比较舒服点,测试只好写麻烦点拉

但是我不晓得怎么在测试里控制 数据库事务.比如下面的UserAccountDaoImpTest.testGetInsertUpdateDeleteAccount()
用SqlMapClient.startTranscation()  commitTranscation()...会有问题

通过的测试
public class DaoImpTest extends TestCase {
	protected final void initDaoImp(SqlMapClientDaoSupport daoImp); throws Exception {
		String classesDirLoc = ClassLoader.getSystemResource("");.getFile();;
		File webinfDir = new File(classesDirLoc);.getParentFile();;

		//init data source
		InputStream is = new FileInputStream(new File(webinfDir,
				"jdbc.properties"););;
		Properties jdbcProperties = new Properties();;
		jdbcProperties.load(is);;
		BasicDataSource basicDS = new BasicDataSource();;
		basicDS.setDriverClassName(jdbcProperties
				.getProperty("jdbc.driverClassName"););;
		basicDS.setUrl(jdbcProperties.getProperty("jdbc.url"););;
		basicDS.setUsername(jdbcProperties.getProperty("jdbc.username"););;
		basicDS.setPassword(jdbcProperties.getProperty("jdbc.password"););;
		DataSource ds = basicDS;

		//init sqlMapClient
		Reader reader = new FileReader(new File(webinfDir, "sqlMapConfig.xml"););;
		SqlMapClient sqlMapClient = new XmlSqlMapClientBuilder();
				.buildSqlMap(reader);;

		//init daoImp
		daoImp.setDataSource(ds);;
		daoImp.setSqlMapClient(sqlMapClient);;

	}
}


public class UserAccountDaoImpTest extends DaoImpTest {

	private UserAccountDao dao;

	protected void setUp(); throws Exception {

		UserAccountDaoImp daoImp = new UserAccountDaoImp();;
		this.initDaoImp(daoImp);;
		this.dao = daoImp;

	}
	public void testGetInsertUpdateDeleteAccount(); {...}
}

public class UserAccountDaoImp extends SqlMapClientDaoSupport implements
		UserAccountDao {...}
0 请登录后投票
   发表时间:2004-12-09  
我的dao测试很土,插个进去,读出来,删掉,再读,用事务包起来,米用过dbUnit,但是现在我做不了事务了,测试删操作失败,数据库就脏了....
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics