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代码:
- public class TestAction extends ActionSupport{
- private UserModel user;
- public UserModel getUser() {
- return user;
- }
- public void setUser(UserModel user) {
- this.user = user;
- }
- public String execute() throws Exception {
- if ("Struts2".equals(user.getName())){
- return SUCCESS;
- }else{
- return ERROR;
- }
- }
- }
这个Action类平平无奇,甚至比以前写过的大多数Action类都要简单。
在第四章中,已经看到了如何在java application中测试这个Action类了:直接在main方法中新建这个类的一个对象,它需要的参数可以直接通过setUser方法赋予,调用这个对象的execute方法,可以直接看到这个Action类运行后要跳转到的Result:
java代码:
- public class MyTest {
- public static void main(String[] args) {
- TestAction action = new TestAction();
-
- UserModel user = new UserModel();
- user.setName("Struts2");
-
- action.setUser(user);
-
- try {
- String result = action.execute();
- System.out.println("result:\t" + result);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
运行一下,最终得到的结果“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代码:
- public class TestActionTestCase extends TestCase {
- public void testName() {
- TestAction action = new TestAction();
-
- UserModel user = new UserModel();
- user.setName("Struts2");
-
- action.setUser(user);
- try {
- String result = action.execute();
- assertEquals("success", result);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
测试用例的类要继承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获取更多内容
分享到:
相关推荐
研磨Struts2
《研磨Struts2》原书配套源代码,配合Struts2原书使用,快速学习Struts2技术。
由于文件较大,我把这个文档切割为2部分,这是第一部分,请下载完第一部分后一定要下载第二部分,否则不能阅读。
研磨struts2博文,详细讲解了struts2运行流程,值得大家阅读
《研磨Struts2》原书配套PPT,结合《研磨Struts2》配套使用,快速学习Struts2框架。
研磨Struts2 高清完整版,请和第一部分一起下载啊
《研磨Struts 2》PDF版本下载
研磨Struts2_12859679_高清完整版
研磨Struts2-高清-完整目录-2011年10月,分享给所有需要的人
研磨struts,仅是简版,我也是从网上下来的。大家凑合看吧。
第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...
第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...
第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 装饰模式...
研磨设计模式.part2 一定要下载5部分
第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式(Flyweight) 第21章 解释器模式(Interpreter) 第22章 ...