Spring DAO层的测试AbstractTransactionalDataSourceSpringContextTests

1. Spring DAO层的测试AbstractTransactionalDataSourceSpringContextTests
2. spring2.5, 不知道为什么Junit4的风格用不了!!

Spring的DAO层的测试,我是通过继承AbstractTransactionalDataSourceSpringContextTests来做的。比较简单,而且又支持回滚,没有数据库的耗时操作,又是spring-test.jar发布包里直接支持的,所以就选个了。

代码实现也很简单,我先定义了一个base类,其他的测试类全部都继承这个base类,就更方便控制了。

public class BaseDAOTestCase extends AbstractTransactionalDataSourceSpringContextTests {
 
protected final static Log log = LogFactory.getLog(BaseDAOTestCase.class);
 
@Override
public String[] getConfigLocations() {
setAutowireMode(AUTOWIRE_BY_TYPE);
return new String[] { "classpath:/test-*-beans.xml", "classpath:/test-*-beans.xml" };
}
}

实现test的类:

package com.dvs.biz.dao.ibatis;
 
import java.util.List;
 
import org.junit.Before;
import org.junit.Test;
 
import com.dvs.biz.dao.UserDAO;
import com.dvs.biz.model.User;
import com.dvs.common.dao.ibatis.BaseDAOTestCase;
/**
*
* Now, Junit 3.8.1 version.
*
* But I hope everyone can also follow Junit4 coding style
*
*/
public class UserDAOIbatisTest extends BaseDAOTestCase {
 
private UserDAO userDao;
private User user;
private Integer pk;
private Integer pk2 = new Integer(1137799366);
 
public void setUserDAO(UserDAO userDao) {
this.userDao = userDao;
}
 
public UserDAOIbatisTest() {
pk = 12345678;
user = new User();
user.setAddress("aa");
user.setAge(12);
user.setPassword("aa");
user.setPk(pk);
user.setUsername("aa");
}
 
@Before
public void init() {
}
 
@Test
public void testGetList() {
try {
List list = userDao.getList();
User user1 = (User) list.get(0);
assertNotNull(user1.getPk());
} catch (Exception e) {
e.printStackTrace();
}
}
 
}

这个东西特别奇怪,spring2.5已经明确说了支持junit 4.4, 可是这个类里面写的 @Before, @Test就是没有作用。在spring中文论坛也问了,目前还没有反应呢。!!!

我查了spring的源代:

我的类叫BaseTest
extends AbstractTransactionalDataSourceSpringContextTests
extends AbstractTransactionalSpringContextTests
extends AbstractDependencyInjectionSpringContextTests
extends AbstractSingleSpringContextTests
extends AbstractSpringContextTests
extends ConditionalTestCase
extends TestCase

----------------

下边是ConditionalTestCase类的开头。

package org.springframework.test;
 
import junit.framework.TestCase;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
/**
* Superclass for JUnit 3.8 based tests that allows conditional test execution
* at the individual test method level. The
* {@link #isDisabledInThisEnvironment(String) isDisabledInThisEnvironment()}
* method is invoked before the execution of each test method. Subclasses can
* override that method to return whether or not the given test should be
* executed. Note that the tests will still appear to have executed and passed;
* however, log output will show that the test was not executed.
*
* @author Rod Johnson
* @since 2.0
* @see #isDisabledInThisEnvironment
*/
public abstract class ConditionalTestCase extends TestCase {

===================

上面写着,Superclass for JUnit 3.8 based tests 。请问这个是什么问题啊,是bug吗?还是怎么回事!!

我的在程序里的junit4.4规范代码运行不了,3.8规范的代码是OK.

--------------------------------------------------------------------------------------------------------

自己回复一下吧,找到解决办法了。

spirng2.5不用上面的类了,按下以下的形式,可以做junit4.4的单元测试了。

package com.dvs.common.dao.ibatis;
 
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;
 
/**
*
* @author Conan
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:/test-*-beans.xml" })
@TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)
@Transactional
public class BaseDAOTestCaseJunit44 {
 
}

还有一个是子类:

package com.dvs.biz.dao.ibatis;
 
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
 
import java.util.List;
 
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
 
import com.dvs.biz.dao.UserDAO;
import com.dvs.biz.model.User;
import com.dvs.common.dao.ibatis.BaseDAOTestCaseJunit44;
 
/**
*
* @author Conan
*
*/
public class UserDAOIbatisTest extends BaseDAOTestCaseJunit44{
 
private UserDAO userDao;
private User user;
private Integer pk;
private Integer pk2 = new Integer(123);
 
@Autowired
public void setUserDAO(UserDAO userDao) {
this.userDao = userDao;
}
 
public UserDAOIbatisTest() {
pk = 1212;
user = new User();
user.setAddress("aa");
user.setAge(12);
user.setPassword("aa");
user.setPk(pk);
user.setUsername("12");
}
 
@Before
public void init() {
}
 
@Test
public void getList() {
try {
List list = userDao.getList();
User user1 = (User) list.get(0);
assertNotNull(user1.getPk());
} catch (Exception e) {
e.printStackTrace();
}
}
 
}


这样子就完成了,从Junit3.8向Junit4.4的转变。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值