利用Spring测试类测试Dao和Service

    首先添加包spring-mock-1.2.6.jar或spring-test-3.2.0.RELEASE.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测试父类AbstractTransactionalJUnit4SpringContextTests同样在spring管理的事务中进行,但是继承该类后无法再在Test Suite里跑。

    以下是测试Service的Abstract方法,写测试类时可以继承该方法,让测试类变得简单。至于Dao的测试类写法就大同小异了。

AbstractServiceTests.java

package cn.com.test;

import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;

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

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

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

	/**
	 * 有参构造函数
	 * 
	 * @param name
	 */
	public AbstractServiceTests(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;
	}
}

测试类ServiceTest.java代码如下:

package cn.com.test;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import cn.com.entity.User;
import cn.com.service.IUserService;

public class ServiceTest extends AbstractServiceTests {

	@Autowired
	private IUserService userService;

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

	@Test
	// 测试添加用户
	public void testSave() {
		User user = new User();
		user.setUsername("rongxh7");
		user.setPassword("blogjava");
		userService.save(user);
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值