编写Action测试用例的经典法则

本文深入分析了在web应用开发中经常被忽视的Action层单元测试,指出其价值并提供了一种简单有效的实现方式。通过设置ActionContext、创建Action动态代理对象并进行JUnit断言,演示了如何完成单元测试。重点强调了参数传递和执行过程中的关键步骤,为开发者提供实用的参考。

我们通常在开发web应用过程中,展现层Action的单元测试经常被我们忽视了,主要原因是:

1、Action层的业务逻辑比较简单。大家潜意识认为这一部分的代码不重要。

2、Action层难以模拟http请求传递参数,需要依赖web容器,因此给单元测试编写带来一定的难度。

我写了一个简单的Action单元测试用例,供大家参考。基于struts的mock和webwork的ActionProxyFactory都可以进行Action的单元测试。我个人比较倾向与ActionProxyFactory做单元测试。其实写action单元测试非常简单,大致分为三步就可以完成单元测试:

一、设置ActionContext上下文参数

将表单传递的请求参数添加到map中

二、创建Action动态代理对象

通过public abstract ActionProxy createActionProxy(String namespace, String actionName, Map extraContext) throws Exception 创建action代理对象。

三、junit断言执行结果

assertEquals(testAction.login(),”success”)

详细用例参考:

public class TestActionTest extends BaseCaseTest{

private ActionProxy proxy = null;

private IVoucherService voucherService;

@Before

public void setUp() throws Exception {

IMocksControl control = EasyMock.createControl();

voucherService = control.createMock(IVoucherService.class);

Map<String, Object> params = new HashMap<String, Object>();

params.put(”loginId”,”test”);

params.put(”password”,”111111″);

params.put(”voucherService”, voucherService);

Map extraContext = new HashMap();

extraContext.put(ActionContext.PARAMETERS,params);

try {

proxy = ActionProxyFactory.getFactory().createActionProxy(”/user”, “testAction”, extraContext);

proxy.setExecuteResult(false);

assertEquals(proxy.execute(),”success”);

} catch (Exception e) {

e.printStackTrace();

}

}

@Test

public void testLogin() {

TestAction testAction = (TestAction) proxy.getAction();

assertEquals(testAction.login(),”success”);

}

}


注:创建代理action一定要执行proxy.execute()方法,否则参数不能够增加到actionContext上下文中。因为 proxy.execute()中会执行 invocation.invoke()核心方法,遍历执行action中所有的拦截器,包括其中的参数拦截器。


11年工作经验 | 求职意向:测试工程师 | 期望薪资 :12-15K | 期望城市 :西安 个人优势 四年系统测试经历 ,对协议测试流程比较熟悉 ,可利用Python编写自动化脚本。 工作经历 中软国际有限公司 测试工程师 2016.12-2024.10 项目简介: 1.基于 3GPP协议开发构造测试用例,结合实验室基站测试环境,验证系统版本流程,并对测试log分析归纳,基于结果优化测试流程;工作中使用Python编写hist脚本,提高测试效率;编写测试模板,提高问题分析效率。 宁波麦博韦尔移动电话有限公司 测试工程师 2014.07-2016.12 工作描述:根据需求使用MFC和visul sudio开发相应的软件配合车间工作以及对现有软件的维护和修改使得更贴合当前使用。 1.需求收集及整理。 2.需求分析 3.编写或修改软件 项目经历 中软国际 测试工程师 2016.12-2024.10 1.从事系统测试工作,根据用例要求配置实验室环境,构造用例条件,测试相关流程,主要用于发现版本不足。 2.对不易触发的用例和常用环境配置编写 Python 脚本,提高工作效率。 3.使用 Python 编写 GTR和 hist 用例 系统测试工程师 2016.12-2021.4 项目描述: 系统测试主要是对手机或单板的基本功能进行手动测试,参与产品测试的全流程,包括测前环境搭建,制定测试方案,进行缺陷跟踪定位,协助开发复现解决问题等。 个人职责: 1.负责版本和模块的系统测试工作; 2.根据项目计划制定项目测试用例并实施,保证项 目质量和进度; 3.负责相关模块的测试环境建设和维护工作; 4.设计与执行测试用例,跟踪定位产品软件中的缺陷或问题; 5.与产品开发人员就测试到的产品问题进行沟通; 6.开发人员实施修改后对软件进行测试以确保修改完成; 自动化测试工程师 2021.5-2022.7 项目描述: 主要是将北京GTR平台的自动化用例转换到西安HIST平台上,由于框架不同,需要重新写函数,调试脚本,分析失败。 个人职责: 1.负责相关模块的测试环境建设和维护工作; 2.分析GTR自动化用例,找出测试点以及测试方法; 3.利用Python语言将GTR自动化用例中的测试点及测试方法编写HIST自动化用例; 4.调试及优化编写好的HIST用例,确保测试用例的质量和效率; 自动化测试工程师 2022.8-2024.10 项目描述: 主要是对手机或单板的基本功能进行自动化测试,参与产品测试的全流程,包括制定测试方案,进行缺陷跟踪定位,协助开发复现解决问题等。 个人职责: 1.设计并执行测试用例,记录测试结果并准备测试报告; 2.使用自动化测试框架和工具来提高测试效率和覆盖率; 3.不断改进测试流程和方法,以提高质量和效率; 麦博韦尔移动有限公司 测试工程师 2014.07-2016.12 项目描述: 车间管理系统:实现车间各部门之间板子信息互通,根据唯一标识记录跟踪板子去向及状态,包含生产部门产品编号绑定,装配部门板子测试结果记录,包装信息记录等。 个人职责: 1.负责前期各部门需求收集及沟通; 2.对软件的部分代码进行开发; 3.软件开发使用后的各种维护;
最新发布
07-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值