摘要:主要讨论ssh2结合AbstractTransactionalDataSourceSpringContextTests抽象类进行测试遇到的一些问题:基于Acegi的测试 上传文件测试
struts2+spring+hibernate结合AbstractTransactionalDataSourceSpringContextTests对action/service/dao进行测试,支持会滚,实在是太方便了。
测试类的基类
其它action测试类继承它就可以了
看看下面action层的测试
简直和普通的方法一样。
当然,如果我们要测试service层的方法,还可以在基础测试类中增加private HibernateTemplate hibernateTemplate;,这样子类就可以很方便的调用this.getHibernateTemplate()方法了,太方便了。
但是使用了一段时间测试后,还发现了一些问题。
1 虽然可以使用spring-mock模拟出servlet容器,但是还是建议不要在方法中写诸如request.getParameter()之类的代码,这对于测试来时非常的不方便。在struts2中可以使用set/get来替换。
2 虽然spring的测试已经很全面了,但是我还没有发现基于Acegi安全角色的测试,使得我测试的时候不得不把方法上的标注给去掉再进行测试,不知道大家有什么好的解决方案。
3 对于文件上传得方法进行测试,也非常的不方便,因为我要把它上传到web目录下面。我不得不找一个真实路径的文件进行模拟,不知道spring-mock又没有这个方面的模拟,探寻中。。。。
4 另外还有一个问题就是,当我对dao层的delete(object);进行测试的时候,发现被删除的对象并没有消失,不知是否原因,未刷新?继续测试中。。。。
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层的测试
- 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 对于文件上传得方法进行测试,也非常的不方便,因为我要把它上传到web目录下面。我不得不找一个真实路径的文件进行模拟,不知道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
- }