`

《研磨struts2》第十六章 单元测试 之 16.2 测试动作类Action

 
阅读更多

16.2  测试动作类Action

16.2.1测试动作类Action入门

通过前面的学习已经了解到:Struts2的动作类Action,可以做到完全和web无关,不再依赖HttpServletRequest和HttpServletResponse等servlet的Api,因此,可以非常方便的直接在java application中调用和运行。

       来写一个Action,它没有什么特殊的功能,只是接收一个UserModel对象,判断这个对象的name属性,如果等于struts2则整个Action跳转到名为success的Result,否则跳转到名为error的Result,示例代码如下:

 

java代码:
  1. public class TestAction extends ActionSupport{  
  2.     private UserModel user;  
  3.     public UserModel getUser() {  
  4.         return user;  
  5.     }  
  6.     public void setUser(UserModel user) {  
  7.         this.user = user;  
  8.     }  
  9.     public String execute() throws Exception {  
  10.         if ("Struts2".equals(user.getName())){  
  11.             return SUCCESS;  
  12.         }else{  
  13.             return ERROR;  
  14.         }  
  15.     }  
  16. }  

这个Action类平平无奇,甚至比以前写过的大多数Action类都要简单。

       在第四章中,已经看到了如何在java application中测试这个Action类了:直接在main方法中新建这个类的一个对象,它需要的参数可以直接通过setUser方法赋予,调用这个对象的execute方法,可以直接看到这个Action类运行后要跳转到的Result:

 

java代码:
  1. public class MyTest {  
  2.     public static void main(String[] args) {  
  3.         TestAction action = new TestAction();  
  4.   
  5.         UserModel user = new UserModel();  
  6.         user.setName("Struts2");  
  7.           
  8.         action.setUser(user);  
  9.   
  10.         try {  
  11.             String result = action.execute();  
  12.             System.out.println("result:\t" + result);  
  13.         } catch (Exception e) {  
  14.             e.printStackTrace();  
  15.         }  
  16.     }  
  17. }  

运行一下,最终得到的结果“result:success”,如果把name的值改为别的,则会得到“result:error”的结果。

       接下来思考几个问题:

  • 到底测试了Struts2的哪些组件?
        答:现在测试的是Action组件。
  • 测试的时候所依赖的环境和真正运行的环境是否一样?
        答:不一样,在上面的测试中并没有依赖web环境,但是完全可以模仿HttpServletRequest向Action中传入参数。
  • 测试的结果能做到自动判断而不需要人工介入吗?
        答:现在仍需要由人工去判断。

虽然上面的测试正常运行了,可是依赖人工去判断测试是否正确,这不是个长久之计,因为随着功能越来越多,那么人工判断的量就会非常大;而且,按照每日集成测试的建议,通常需要测试全部的功能,也就是从第一个功能开始一直测试到当天的新功能,因为新写的代码可能会对以前已经实现的功能带来影响,这样再依赖于人工判断,就有点不太现实了。

这种情况下,一定要引入一些测试的工具,好帮助我们进行单元测试和自动化的测试。当然,这方面的工具,鼎鼎大名的就是JUnit了,下面一起来看看。

16.2.2使用JUnit测试动作类Action

要使用JUnit来进行测试,首先就要在工程中添加对Junit的支持。

请在工程上右击,点击【Properties】得到工程的属性页,在左边选择【Java Build Path】,然后在右边选择Libraries,如下图所示:

图16.1 选择工程的Properties属性页中的Libraries

       然后点击【Add Library】,弹出选择对话框:

图16.2 库选择对话框

       选中其中的JUnit,点击【Next】。得到JUnit版本选择对话框:

图16.3 JUnit版本选择对话框

       选择常用的JUnit3即可,点击【Finish】,至此就在我们的工程中加入了对JUnit的支持。使用JUnit进行单元测试的具体知识,这里就不去展开讲述了

来编写一个测试TestAction的测试用例,要测试的功能跟上面的要求是一样的,示例代码如下:

 

java代码:
  1. public class TestActionTestCase extends TestCase {  
  2.     public void testName() {  
  3.         TestAction action = new TestAction();  
  4.   
  5.         UserModel user = new UserModel();  
  6.         user.setName("Struts2");  
  7.   
  8.         action.setUser(user);  
  9.         try {  
  10.             String result = action.execute();  
  11.             assertEquals("success", result);  
  12.         } catch (Exception e) {  
  13.             e.printStackTrace();  
  14.         }  
  15.     }  
  16. }  

测试用例的类要继承junit中的TestCase,每个测试方法,都是public的、没有参数的、没有返回值的、且方法名必须以“test”开头的方法。

观察方法中的代码,跟上一小节中main方法里写的差不多,只不过最后不是打印出结果,而是用assertEquals(“success”,result)来判断结果是否和预期的值相同。如果相同,则这个测试方法就会被判断为通过测试。

       运行这个测试,和运行java applicataion相似,也是在代码中任意地方右击,选择弹出菜单的【Run as】->【JUnit test】,会出现一个新的JUnit的视图,显示绿条表明测试通过。

图16.4 JUnit运行结果

       经过这一小节的学习,仍然测试的是Action组件,也仍然脱离了web环境进行测试,但是单元测试的代码可以自动判断测试是否成功了。

 

私塾在线网站原创《研磨struts2》系列

转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4144.html

欢迎访问http://sishuok.com获取更多内容

8
5
分享到:
评论

相关推荐

    研磨Struts2配书视频对应的演示源代码

    2. **拦截器(Interceptors)**:Struts2的核心之一是其拦截器机制,它们在Action执行前后执行一系列预定义或自定义的操作。这些拦截器可以用于登录验证、日志记录、性能监控等。源代码中可能包含了不同类型的拦截器...

    研磨Struts2

    - **Action类**:Action是Struts2的核心组件之一,负责处理用户的请求。本节将详细讲解Action类的设计原则和实现方法。 - **配置文件**:struts.xml用于配置Action的映射关系以及其他一些设置。本节将详细介绍如何...

    研磨struts2 高清版

    由于文件较大,我把这个文档切割为2部分,这是第一部分,请下载完第一部分后一定要下载第二部分,否则不能阅读。

    研磨struts2

    1. **Action**:Struts2 中的核心组件之一,负责处理用户的请求并返回一个结果。Action 类通常继承自 `ActionSupport` 类或者实现 `Action` 接口。 - **实现方式**:可以通过实现 `Action` 接口、继承 `...

    研磨Struts2配书视频对应的PPT

    《研磨Struts2》这本书是专门针对Struts2框架的学习指南,通过深入浅出的方式讲解了Struts2的核心概念和技术。其配套的PPT和视频旨在帮助读者更直观地理解书中的理论知识,并将其付诸实践。 在研读《研磨Struts2》...

    研磨struts2_系列文章.pdf

    从给定的文件信息来看,这是一份关于Struts2框架深入解析的系列文章,涵盖了Struts2的基础、架构、核心组件、高级特性等多个方面,旨在帮助读者全面掌握Struts2框架的应用与实践。以下是对该系列文章所涵盖的关键...

    《研磨Struts 2》PDF版本下载.txt

    根据提供的文件信息,我们可以推断出这是一份关于《研磨Struts 2》书籍PDF版本的下载资源。为了更好地理解和概括这份资料所涉及的知识点,我们先来了解一下Struts 2框架及其重要性,然后深入探讨《研磨Struts 2》这...

    研磨struts

    7. **Action**:Action是Struts2的核心,它代表了业务逻辑的执行单元。开发者可以自定义Action类,通过注解或XML配置来定义Action的行为。 8. **Action的实现与配置**:Action可以通过实现特定接口或使用注解进行...

    研磨Struts2 高清完整版.part2

    研磨Struts2 高清完整版,请和第一部分一起下载啊

    研磨Struts2_12859679_高清完整版.part2.rar

    研磨Struts2_12859679_高清完整版

    研磨Struts2-高清-完整目录-2011年10月

    研磨Struts2-高清-完整目录-2011年10月,分享给所有需要的人

    研磨设计模式(完整带书签).part2.pdf

    第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...

    D4060(用Taber研磨器测试烤漆层涂层耐磨的标准测试方法)中文版.pdf

    《D4060:用Taber研磨器测试烤漆层涂层耐磨的标准测试方法》中文版详述了测定烤漆涂层耐磨性的标准程序。该标准适用于平面、硬表面上喷涂的漆层,如金属面板,通过Taber研磨器进行磨损测试。标准中的数据反映了其...

    人教版化学必修一第一章第一节化学实验基本方法单元测试题.pdf

    【知识点】 1. 化学实验安全:在化学实验中,安全是首要考虑的因素。例如,乙醇作为易燃液体,其包装箱应当贴...以上是对人教版化学必修一第一章第一节化学实验基本方法单元测试题中涉及的化学实验知识点的详细解析。

    研磨设计模式-part2

    第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...

    2018年九年级物理全册第13_14章单元综合测试题新版新人教版

    这篇资料主要涵盖了初中九年级物理第13和14章的内容,主要涉及内能和内能的利用。以下是这些章节中的重要知识点: 1. **分子动理论**:桂花的香味是由于分子处在无规则运动中,即分子扩散现象。这说明即使肉眼看...

Global site tag (gtag.js) - Google Analytics