首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

单元测试之实践4 Action的测试

2012-08-03 
单元测试之实践四 Action的测试Action的测试是比较辛苦的。因为它依赖与其他的环境(比如tomcat)。?????? 在

单元测试之实践四 Action的测试

Action的测试是比较辛苦的。因为它依赖与其他的环境(比如tomcat)。
?????? 在我的印象中,基于struts的测试是很麻烦的,因为对于execute方法,你必须mock两个对象进去。
????? 还好。基于Webwork的测试相对简单些。
????? 下面让我们来测试一个例子吧
??????

java 代码?
  1. ??????Account?account;?? IAccountService?accountService;??
  2. public?void?setAccount(Account?account)?{?? ????this.account?=?account;??
  3. }?? ??
  4. public?void?setAccountService(IAccountService?accountService)?{?? ????this.accountService?=?accountService;??
  5. }?? ??
  6. public?String?regist()?throws?Exception?{?? ????if(account?==?null)?{??
  7. ????????account?=?new?Account();?? ????????return?INPUT;??
  8. ????}?? ??????
  9. ????if(!validForm(account))??? ????????return?INPUT;??
  10. ?????? ????try?{??
  11. ????????accountService.regist(account);?? ????}?catch?(ObjectExistsException?e)?{??
  12. ????????e.printStackTrace();?? ????????return?INPUT;??
  13. ????}?? ??????
  14. ????return?SUCCESS;?? }??
  15. ?? private?boolean?validForm(Account?e)?{??
  16. ????if(e.getName()?==?null?||?e.getName().trim().equals(""))?? ????????return?false;??
  17. ????if(e.getPassword()?==?null?||?e.getPassword().trim().equals(""))?? ????????return?false;??
  18. ????return?true;?? }??


有经验的程序员见到上面的代码应该就知道怎么测试了。
我们只需setAccount,跟setAccountService即可,
而Account本身来讲就是是个po,所以可以自己new一个
AccountService则可以mock一个。真是太完美了,我太喜好mock,它总是给我惊喜
java 代码?

  1. package?org.wuhua.action;?? ??
  2. import?junit.framework.TestCase;?? ??
  3. import?org.easymock.MockControl;?? import?org.wuhua.exception.ObjectExistsException;??
  4. import?org.wuhua.model.Account;?? import?org.wuhua.service.IAccountService;??
  5. ?? import?sms.king.AccountManager;??
  6. ?? import?com.opensymphony.xwork.Action;??
  7. ?? public?class?AccountActionTest?extends?TestCase?{??
  8. ????private?MockControl?control;?? ????IAccountService?accountService;??
  9. ????protected?void?setUp()?throws?Exception?{?? ????????control?=?MockControl.createControl(IAccountService.class);??
  10. ????????accountService?=?(IAccountService)?control.getMock();?? ???????????
  11. ????}?? ??????
  12. ????public?void?testRegistOk()?throws?Exception?{?? ????????Account?employee?=?new?Account("name");??
  13. ????????employee.setPassword("password");?? ??????????
  14. ??????? ???????????
  15. ?????????? ????????accountService.regist(employee);??
  16. ????????control.setVoidCallable(1);?? ??????????
  17. ????????control.replay();?? ??????????
  18. ????????AccountAction?action?=?new?AccountAction();?? ????????action.setAccount(employee);??
  19. ????????action.setAccountService(accountService);?? ??????????
  20. ????????assertEquals(Action.SUCCESS,?action.regist());?? ??????????
  21. ????????control.verify();?? ????}??
  22. ?????? ????public?void?testRegistNameExists()?throws?Exception?{??
  23. ????????Account?employee?=?new?Account("name");?? ????????employee.setPassword("password");??
  24. ?????????? ???
  25. ??????? ??????????
  26. ????????accountService.regist(employee);?? ????????control.setThrowable(new?ObjectExistsException(""));??
  27. ?????????? ????????control.replay();??
  28. ?????????? ????????AccountAction?action?=?new?AccountAction();??
  29. ????????action.setAccount(employee);?? ????????action.setAccountService(accountService);??
  30. ?????????? ????????assertEquals(Action.INPUT,?action.regist());??
  31. ?????????? ????????control.verify();??
  32. ????}?? }??
?
ok,一个测试的例子就好了。

热点排行