利用Spring扩展机制Junit测试Dao和Service的总结

在网上看了很多关于Junit测试Dao和Service的文章,然后做出自己需要的例子,这里源码共享一下,以此回馈一下 :)
介绍一下Srping的Junit扩展机制相关类:
下载包:spring-test.jar
在包org.springframework.test下的Spring测试父类
1、AbstractSpringContextTests类[1],该类全部方法是protected的,通常不使用这个类,而使用它的子类们。

2、AbstractDependencyInjectionSpringContextTests类[2]:继承于类[1]:如果仅仅使用Spring依赖注入功能,可以让测试用例继承该类。

3、AbstractTransactionalSpringContextTests类[3]:继承于类[2], 继承该类的测试用例在spring管理的事务中进行,测试完后对数据库的记录不会造成任何影响。对数据库进行一些操作后,它会自动把数据库回滚,这样就保证了你的测试对于环境没有任何影响。

4、AbstractTransactionalDataSourceSpringContextTests:继承于类[3], 功能更强大,用于测试持久层组件,看其源代码, 有一行"protected JdbcTemplate jdbcTemplate;",提供了一个JdbcTemplate的变量, 通过该对象可以直接操作数据库。
继承了这四个类的测试类都是属于Test Case性质,可以在Test Suite里跑。

在包org.springframework.test.context.junit4下的Spring测试父类
[color=orange]AbstractTransactionalJUnit4SpringContextTests[/color]同样在spring管理的事务中进行,但是继承该类后无法再在Test Suite里跑。

以下是测试Service的Abstract方法,写测试类时可以继承该方法,让测试类变得简单。
[color=olive][b]AbstractServiceTransactionalTests.Java [/b][/color]
package com.Bruce.springJunit.service;
import org.springframework.test.AbstractTransactionalSpringContextTests;

/**
* 基于AbstractTransactionalSpringContextTests的抽象测试类
*
* 继承此类,某个测试方法需要事物回滚时,直接在方法前加@Rollback(true)即可
* @author Bruce Qin 2010.10.11
*/
public abstract class AbstractServiceTransactionalTests extends
AbstractTransactionalSpringContextTests {

// 文件系统绝对路径
// String filePath = "file:D:/WorkSpace_JEE/ParkManager/src/";
// String applicationContextFile = "applicationContext.xml";

// 项目classpath路径
String applicationContextFile="classpath:applicationContext.xml";

/**
* 无参构造函数
*/
public AbstractServiceTransactionalTests() {
super();
}

/**
* 有参构造函数
*
* @param name
*/
public AbstractServiceTransactionalTests(String name) {
super(name);
}

/**
* 需要加载的配置文件地址列表
* @return new String[] { applicationContextFile };
*/
abstract String[] getOtherConfigs();

/**
* 覆盖的获取配置文件地址的方法
*/
protected String[] getConfigLocations() {
String[] otherConfigs = getOtherConfigs();
// 所有配置文件列表
String[] configFiles = new String[otherConfigs.length + 1];
configFiles[0] = applicationContextFile;

/**
* public static void arraycopy(Object src, int srcPos, Object dest, int
* destPos, int length)
* 源数组中位置在 srcPos到srcPos+length-1 之间的组件被分
* 别复制到目标数组中的 destPos 到 destPos+length-1 位置。
*/
System.arraycopy(otherConfigs, 0, configFiles, 1, otherConfigs.length);
return configFiles;
}



测试类[b]TestSysparamconfService.java [/b]代码如下:
package com.Bruce.springJunit.service;

import java.util.List;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import com.Bruce.entity.Sysparamconf;
import com.Bruce.service.SysparamconfService;

public class TestSysparamconfService extends AbstractServiceTransactionalTests {

@Autowired
private SysparamconfService sysparamconfService;

@Override
String[] getOtherConfigs() {
return new String[] { applicationContextFile };
}

@Test
public void testFindAll() {
// fail("Not yet implemented");
System.out.println("test FindAll()---size "
+ sysparamconfService.findAll().size());
}

@Test
@Rollback(true)
//保护数据库现场,让事物不提交,直接rollback
public void testWriteSysparameterSysparamconf() {
System.out.println("test WriteSysparameter...");
Sysparamconf sysparamconf = new Sysparamconf();
boolean test;
sysparamconf.setPname("testName2");
sysparamconf.setPtype(1);
sysparamconf.setPvalue("testName2_value2");
test = sysparamconfService.writeSysparameter(sysparamconf);
assertTrue(test);

}

}


至于Dao的测试类写法就大同小异了。
好了,基于框架的Junit测试用例的砖呀玉呀都抛完咯!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值