`
wuhua
  • 浏览: 2112003 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

阅读更多
       Action的测试是比较辛苦的。因为它依赖与其他的环境(比如tomcat)。
       在我的印象中,基于struts的测试是很麻烦的,因为对于execute方法,你必须mock两个对象进去。
      还好。基于Webwork的测试相对简单些。
      下面让我们来测试一个例子吧
      
java 代码
 
  1.       Account account;  
  2. IAccountService accountService;  
  3. public void setAccount(Account account) {  
  4.     this.account = account;  
  5. }  
  6.   
  7. public void setAccountService(IAccountService accountService) {  
  8.     this.accountService = accountService;  
  9. }  
  10.   
  11. public String regist() throws Exception {  
  12.     if(account == null) {  
  13.         account = new Account();  
  14.         return INPUT;  
  15.     }  
  16.       
  17.     if(!validForm(account))   
  18.         return INPUT;  
  19.       
  20.     try {  
  21.         accountService.regist(account);  
  22.     } catch (ObjectExistsException e) {  
  23.         e.printStackTrace();  
  24.         return INPUT;  
  25.     }  
  26.       
  27.     return SUCCESS;  
  28. }  
  29.   
  30. private boolean validForm(Account e) {  
  31.     if(e.getName() == null || e.getName().trim().equals(""))  
  32.         return false;  
  33.     if(e.getPassword() == null || e.getPassword().trim().equals(""))  
  34.         return false;  
  35.     return true;  
  36. }  

有经验的程序员见到上面的代码应该就知道怎么测试了。
我们只需setAccount,跟setAccountService即可,
而Account本身来讲就是是个po,所以可以自己new一个
AccountService则可以mock一个。真是太完美了,我太喜好mock,它总是给我惊喜
java 代码
 
  1. package org.wuhua.action;  
  2.   
  3. import junit.framework.TestCase;  
  4.   
  5. import org.easymock.MockControl;  
  6. import org.wuhua.exception.ObjectExistsException;  
  7. import org.wuhua.model.Account;  
  8. import org.wuhua.service.IAccountService;  
  9.   
  10. import sms.king.AccountManager;  
  11.   
  12. import com.opensymphony.xwork.Action;  
  13.   
  14. public class AccountActionTest extends TestCase {  
  15.     private MockControl control;  
  16.     IAccountService accountService;  
  17.     protected void setUp() throws Exception {  
  18.         control = MockControl.createControl(IAccountService.class);  
  19.         accountService = (IAccountService) control.getMock();  
  20.            
  21.     }  
  22.       
  23.     public void testRegistOk() throws Exception {  
  24.         Account employee = new Account("name");  
  25.         employee.setPassword("password");  
  26.           
  27.        
  28.            
  29.           
  30.         accountService.regist(employee);  
  31.         control.setVoidCallable(1);  
  32.           
  33.         control.replay();  
  34.           
  35.         AccountAction action = new AccountAction();  
  36.         action.setAccount(employee);  
  37.         action.setAccountService(accountService);  
  38.           
  39.         assertEquals(Action.SUCCESS, action.regist());  
  40.           
  41.         control.verify();  
  42.     }  
  43.       
  44.     public void testRegistNameExists() throws Exception {  
  45.         Account employee = new Account("name");  
  46.         employee.setPassword("password");  
  47.           
  48.    
  49.        
  50.           
  51.         accountService.regist(employee);  
  52.         control.setThrowable(new ObjectExistsException(""));  
  53.           
  54.         control.replay();  
  55.           
  56.         AccountAction action = new AccountAction();  
  57.         action.setAccount(employee);  
  58.         action.setAccountService(accountService);  
  59.           
  60.         assertEquals(Action.INPUT, action.regist());  
  61.           
  62.         control.verify();  
  63.     }  
  64. }  
 
ok,一个测试的例子就好了。
分享到:
评论
8 楼 colonel 2006-12-16  
无花兄弟的文章很适合象我这样的初学者哈~,推荐下!
7 楼 wuhua 2006-12-12  
哈哈。
可以说错别字是我文章的一大特色。
^_^
6 楼 aone 2006-12-12  
哈哈,看了你几篇文章,写的不错,"只吃泥!"
错别字多了点哦~~~
5 楼 wuhua 2006-12-12  
lighter 写道
貌似这一篇文章要放在"agile"版块更好一些吧.
btw:wuhua同学写文章有时候可以把两篇结合成一篇,可能会更好一些,不然让别人看一篇文章要看一,二,三,四才能看完.个人建议而已,别见怪.


提议不错。下次我会更加注意了
呵呵,我爬一篇文章太长了。别人没这个耐心看完。
下次我尽量注意的。谢谢啊
4 楼 lighter 2006-12-12  
ronghao 写道
对ACTION我一般都是不测试的,因为它仅仅是页面的跳转而不包含逻辑

汗!打一个例子,如果你的ACTION把几个list保存在request中使之在相应页面中显示,也不测试啊??
我一般测试struts的action都用StrutsTestCase比较多
3 楼 刑天战士 2006-12-12  
struts的action测试最好用strutstestcase,不需要实现那么多东西了……
2 楼 ronghao 2006-12-12  
对ACTION我一般都是不测试的,因为它仅仅是页面的跳转而不包含逻辑
1 楼 lighter 2006-12-12  
貌似这一篇文章要放在"agile"版块更好一些吧.
btw:wuhua同学写文章有时候可以把两篇结合成一篇,可能会更好一些,不然让别人看一篇文章要看一,二,三,四才能看完.个人建议而已,别见怪.

相关推荐

    单元测试与TDD实践

    **一、单元测试之测试目的** 单元测试,作为软件开发过程中的重要环节,其核心目标在于确保代码的质量、可维护性和可扩展性。它通过独立测试软件中的最小可测试单元,如函数或方法,来验证其功能是否符合预期。这一...

    Junit 单元测试完整案例

    四、测试实践 在案例中,你将看到如何创建测试类,定义测试方法,设置测试数据,以及如何利用JUnit和Spring/Struts提供的工具来编写高效的单元测试。通过分析和运行源码,你可以了解如何将这些概念应用于实际项目,...

    单元测试的总结

    单元测试是软件开发过程中的重要环节,它允许开发者对代码的各个部分进行独立验证,确保它们按照预期工作。...在Web开发项目中,单元测试应被视为最佳实践,以确保每个功能的正确性,减少后期维护的难度。

    Junit测试Action

    【标题】"Junit测试Action"涉及的是在Java开发中使用JUnit进行Action类的单元测试。JUnit是一款广泛使用的Java编程语言的单元测试框架,它使得开发者能够方便地编写和执行测试用例,确保代码的质量和功能的正确性。 ...

    Activity的单元测试

    在Android开发中,Activity是应用的核心组件之一,它负责用户界面的展示和交互。进行Activity的单元测试对于确保代码质量、...务必记住,良好的测试实践可以大大提高软件质量,减少bug的出现,从而提升用户的满意度。

    JUnit单元测试课程PPT与相关文件

    其次,"JUnit.in.Action中文版.pdf" 是一本关于JUnit实践的中文书籍,深入介绍了单元测试的最佳实践和JUnit的高级特性,比如测试套件(Test Suites)、参数化测试、模拟对象(Mocks)和超时测试等。阅读这本书将使你...

    用MockStrutsTestCase测试action测试类

    以下是使用MockStrutsTestCase进行Action测试的关键知识点: 1. **MockStrutsTestCase的引入**:首先,在项目中添加MockStrutsTestCase的依赖。这通常通过Maven或Gradle等构建工具完成。之后,你可以继承...

    自动化测试的实践-应用QTP测试框架

    【自动化测试的实践-应用QTP测试框架】 自动化测试是一种高效、精确的软件质量保障手段,尤其在大型软件项目中,能显著提升测试效率并减少人为错误。QuickTest Professional(QTP,现已被HP Unified Functional ...

    mock struts1 测试

    #### 四、Mock Struts1测试实践 ##### 1. 使用StrutsTest框架 StrutsTest是一个专门为Struts1设计的测试框架,它可以提供一个模拟的运行环境,使开发者能够在没有实际Web服务器的情况下测试Action类。为了使用...

    自动化测试知识ppt包含qtp实践

    - **Action的维护**:学习如何维护测试脚本中的Action。 - **关键字视图**:理解关键字视图的概念和用途。 - **检查点**:设置和使用检查点来验证预期结果。 - **参数化**:利用参数化技术增强脚本的灵活性。 - **...

    QTP自动化测试项目实践.docx

    QTP 自动化测试项目实践 QTP 自动化测试项目实践是自动化测试的重要环节,适当地调整和增强测试脚本,能提高测试脚本的灵活性,增加测试覆盖面,以及提高应对测试对象变更的能力。数据驱动方式的测试脚本开发是解决...

    1自动化测试的实践-应用QTP测试框架.ppt

    自动化测试是现代软件开发过程中...综上所述,QTP测试框架的实践涉及自动化测试的规划、设计、实现和管理等多个方面,需要深入理解业务逻辑,熟练掌握测试工具,以及妥善解决技术难点,以实现高效、可靠的自动化测试。

    Junit in Action 中文版

    总之,《JUnit in Action》中文版是一本全面的指南,它不仅教会读者如何使用JUnit进行单元测试,还引导读者理解测试的重要性和最佳实践。通过阅读这本书,中国的Java开发者能够提升自己的测试技能,从而提高软件项目...

    测试大包.zip

    Java作为一种广泛应用的编程语言,有着丰富的测试框架支持TDD,其中JUnit是Java领域最知名的单元测试框架之一。《JUnit in Action, 2nd Edition》这本书深入探讨了如何有效地使用JUnit进行测试驱动的Java开发。 ...

    四,android四大组件基础介绍及打电话,发短信简单应用 &单元测试

    这四个组件各自承担着不同的职责,是Android系统交互的基础。 1. **Activity**: Activity是用户与应用交互的界面,代表了应用程序中的一个可视化窗口。当用户在屏幕上看到一个屏幕或窗口时,通常就是在与一个...

    单元测试工具——GMOCK概述

    ### 单元测试工具——GMOCK概述 #### 一、引言 单元测试作为软件开发过程中的一个重要环节,能够帮助开发者确保代码的质量与稳定性。其中,**Mock对象**技术在单元测试中扮演着关键角色,它允许测试者在不实际调用...

Global site tag (gtag.js) - Google Analytics