再谈ssh2的测试

摘要:主要讨论ssh2结合AbstractTransactionalDataSourceSpringContextTests抽象类进行测试遇到的一些问题:基于Acegi的测试  上传文件测试

struts2+spring+hibernate结合AbstractTransactionalDataSourceSpringContextTests对action/service/dao进行测试,支持会滚,实在是太方便了。
测试类的基类
Java代码  收藏代码
  1. public class BaseActionTest extends  
  2.         AbstractTransactionalDataSourceSpringContextTests {   
  3.   
  4.     @Override  
  5.     public String[] getConfigLocations() {  
  6.         String[] config = new String[] { "applicationContext-acegi.xml",  
  7.                 "applicationContext-action.xml",  
  8.                 "applicationContext-service.xml",  
  9.                 "applicationContext-dao.xml",  
  10.                 "applicationContext-db.xml",  
  11.                 "applicationContext-mail.xml",  
  12.                 "applicationContext-servlet.xml"};  
  13.         return config;  
  14.     }     
  15.       
  16.     public void testConfig() {          
  17.         assertNotNull("spring-mock has bean init()",this.applicationContext);  
  18.     }  
  19.   
  20. }  
其它action测试类继承它就可以了
看看下面action层的测试

Java代码  收藏代码
  1. public void testInput() throws Exception {  
  2.         adAction.setAdManageService(getAdManageService());  
  3.         result = adAction.input();  
  4.         assertEquals("add", result);  
  5.     }  

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

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

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


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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值