再讨论spring的单元测试

在我以前一篇文章关于spring的文章中仔细讨论过spring单元测试策略,根据最近一些经验。今天再写一点自己的经验:

1.需要把单元测试时不需要的东西拿掉,比如缓存,安全等,这就需要怎么仔细考虑spring的applicationContext.xml功能。

2.DAO与Service的测试需要使用不同的策略,一般来讲,DAO单元测试只测试一个DAO类,而service需要多个DAO来支撑,有时还需要别的service支持。因此需要为DAO与service分别定义两个基类。DAO一般不需要使用事务,因此DAO测试基类继承AbstractDependencyInjectionSpringContextTests;而service需要,Service测试基类继承AbstractTransactionalDataSourceSpringContextTests

3.那怎么简化开发人员编写单元测试类呢?若每次都需要写很多,那他们自然不愿意写,所以架构师应该简化单元测试的编程模型上下功夫。一个原则:每个人只添加自己想要的,必要时可以覆盖全部的配置文件,完全自己来写,下面是我写的两个测试基类的demo


DAO测试基类

public abstract class AbstractDAOTestCase extends
AbstractDependencyInjectionSpringContextTests {

public AbstractDAOTestCase() {
this.setAutowireMode(AUTOWIRE_BY_NAME);
}

@Override
protected String[] getConfigLocations() {
String[] baseConfigs = new String[] { "/spring/applicationContext.xml" };
String[] extentConfigs = getExtentConfigs();
int length = baseConfigs.length + extentConfigs.length;

String[] allConfigs = new String[length];

for (int i = 0; i < baseConfigs.length; i++) {
allConfigs[i] = baseConfigs[i];
}

for (int i = 0; i < extentConfigs.length; i++) {
allConfigs[i + baseConfigs.length] = extentConfigs[i];
}

return allConfigs;
}

//开发人员可以覆盖这个方法,添加自己的配置文件
protected String[] getExtentConfigs() {
return new String[] {};
}

}

Service测试基类

public abstract class AbstractServiceTestCase extends
AbstractTransactionalDataSourceSpringContextTests {

protected UserDAO userDAO;

public AbstractServiceTestCase() {
this.setAutowireMode(AUTOWIRE_BY_NAME);
}

@Override
protected String[] getConfigLocations() {
String[] baseConfigs = new String[] { "spring/applicationContext.xml",
"spring/applicationContext-transaction.xml",
"org/codehaus/xfire/spring/xfire.xml",
"spring/applicationContext-xfire.xml",
"spring/applicationContext-osworkflow.xml",
"spring/platform/*.xml" };
String[] extentConfigs = getExtentConfigs();
int length = baseConfigs.length + extentConfigs.length;

String[] allConfigs = new String[length];

for (int i = 0; i < baseConfigs.length; i++) {
allConfigs[i] = baseConfigs[i];
}

for (int i = 0; i < extentConfigs.length; i++) {
allConfigs[i + baseConfigs.length] = extentConfigs[i];
}

return allConfigs;
}

//开发人员可以覆盖这个方法
protected String[] getExtentConfigs() {
return new String[] {};
}

public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值