再谈ssh2测试

jiyanliang 2008-11-06
struts2+spring+hibernate结合AbstractTransactionalDataSourceSpringContextTests对action/service/dao进行测试,支持会滚,实在是太方便了。
测试类的基类
public class BaseActionTest extends
		AbstractTransactionalDataSourceSpringContextTests {	

	@Override
	public String[] getConfigLocations() {
		String[] config = new String[] { "applicationContext-acegi.xml",
				"applicationContext-action.xml",
				"applicationContext-service.xml",
				"applicationContext-dao.xml",
				"applicationContext-db.xml",
				"applicationContext-mail.xml",
				"applicationContext-servlet.xml"};
		return config;
	}	
	
	public void testConfig() {        
        assertNotNull("spring-mock has bean init()",this.applicationContext);
    }

}
其它action测试类继承它就可以了
看看下面action层的测试

public void testInput() throws Exception {
		adAction.setAdManageService(getAdManageService());
		result = adAction.input();
		assertEquals("add", result);
	}

简直和普通的方法一样。
当然,如果我们要测试service层的方法,还可以在基础测试类中增加private HibernateTemplate hibernateTemplate;,这样子类就可以很方便的调用this.getHibernateTemplate()方法了,太方便了。

但是使用了一段时间测试后,还发现了一些问题。
1 虽然可以使用spring-mock模拟出servlet容器,但是还是建议不要在方法中写诸如request.getParameter()之类的代码,这对于测试来时非常的不方便。在struts2中可以使用set/get来替换。

2 虽然spring的测试已经很全面了,但是我还没有发现基于Acegi安全角色的测试,使得我测试的时候不得不把方法上的标注给去掉再进行测试,不知道大家有什么好的解决方案。
//@Secured( { "ROLE_ADMIN" })
	public String delete() {		
		adManageService.delete(Integer.parseInt(this.getAd_id()));
		return "delete";
	}


3 对于文件上传得方法进行测试,也非常的不方便,我不得不找一个真实路径的文件进行模拟,不知道spring-mock又没有这个方面的模拟,探寻中。。。。

4 另外还有一个问题就是,当我对dao层的delete(object);进行测试的时候,发现被删除的对象并没有消失,不知是否原因,未刷新?继续测试中。。。。
public void testDelete(){
		ad = new Ad();
		ad.setName(name);
		this.getAdDAO().save(ad);
		assertEquals(name, ad.getName());
		ad = (Ad)this.getHibernateTemplate().find("from Ad where name = ?",name).get(0);
		this.getHibernateTemplate().delete(ad);
		assertEquals(null, ad);//错误,对象并不为null
	}

kyo100900 2008-11-07
1.确实应该尽量用set/get
2.对acegi不熟悉
3.Javaeye上有一篇文章:http://charlescui.iteye.com/blog/221057
4.delete完成后,又变回 游离对象, 并不是null
jiyanliang 2008-11-07
谢谢你的推荐!
确实不错!
diddyrock 2008-12-09
lz比较专业,我都是直接搞spring 容器模拟,很麻烦,回去好好研究研究
Global site tag (gtag.js) - Google Analytics