0 0

论struts的测试工具strutsTest3

最近了解了一下struts的测试工具strutsTest,如果action中有对类的依赖的时候该怎么测试呢,具体如下

action:

public class LoginAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {

UserForm userform=(UserForm)form;
String userName = userform.getUsername();
String passWord = userform.getPassword();
String target = "fail";

LoginService loginService = new LoginService();
List list = loginService.login(userName, passWord);

if (list.size() > 0) {
request.setAttribute("message", "登录成功!");
request.getSession().setAttribute(KinmuSysConstant.LOGIN_USER_INFO, list);
target = "success";
} else {
ActionErrors errors = new ActionErrors();
errors.add("loginFail", new ActionMessage("kinmu0010", userName));
addErrors(request, errors);
}

return mapping.findForward(target);
}

}


Test:

public class LoginActionTest extends MockStrutsTestCase {

public LoginActionTest(String arg0) {
super(arg0);
}

protected void setUp() throws Exception {
super.setUp();
setContextDirectory(new File("D:\\workspace\\StrutsWebTest\\WebRoot\\"));
    setServletConfigFile("D:\\workspace\\StrutsWebTest\\WebRoot\\WEB-INF\\web.xml");
}

protected void tearDown() throws Exception {
super.tearDown();
}

public void testLoginSuccess() {
setRequestPathInfo("/login");
addRequestParameter("username","wwt");
addRequestParameter("password","1");
actionPerform();
        verifyForward("success");
verifyForwardPath("/success.jsp");
}
}


主要在action中有
LoginService loginService = new LoginService();
List list = loginService.login(userName, passWord);
对LoginService对象的依赖,感觉应该mock这个对象,但是在test中mock了这个对象后,怎么传入到action中呢?
还是说需要重构以下action中的代码?
2009年4月10日 10:56

2个答案 按时间排序 按投票排序

0 0

1. 你也可以创建一个fake service 类,它不用真实的环境进行操作,因为针对Action单元测试的目的是测试Action本身的逻辑,所以可以这么做。


interface SomeService{
 User getUser(Long id);
 void saveUser(User user);
}

class DummyUserService implements SomeService{
static List<User> userLists=new ArrayList<User>();
static{
 userLists.add(new User(1, "hantsy");
 userLists.add(new User(2, "tom");
}

User getUser(Long id){
for(User user:userLists){
 if(user.getId()==id.longValue()){
  return user;
}
}

void addUser(User user){
 userLists.add(user);
}
}

}

//在测试中,直接new DummyUserService


在练习一些web框架时,我常常选择这么做,因为它不使用后台的数据库,就可以演示(测试)web框架的核心功能。
看起来不怎么样,但非常适用。比如,如果你公司是多人合作开发,并且是前后端分开开发,并且在设计完成后,一些接口已经确定下来,由于各人开发进度不一样,你在写Action时,可能相应的 Service 接口实现还没有完成。怎么办?难道要等别人实现完,才能做web的开发吗?这时,使用这个方法,完全可以不用等它人的实现,而白白浪费时间。

另外,你也可以使用jMock(http://www.jmock.org)等测试工具,它是针对依赖的接口建一个代理类,来隔离依赖进行测试。

2009年4月15日 17:59
0 0

目前比较流行的做法是:action里不直接使用new xxxService()的方式获取service实例,而是把xxxService声明为一个属性,并且提供一个setter方法,从外界注入一个xxxService实例。
这样单元测试就好做了:mock一个service,通过setter注入给action。这样再跑测试用例时,真正运行的就是mock的service了。

2009年4月15日 14:45

相关推荐

    使用EJB+Struts1.3+Ant+Cactus+DbUnit+JMeter+StrutsTest实现测试2

    本项目利用一系列强大的工具,如EJB(Enterprise JavaBeans)、Struts 1.3、Ant构建工具、Cactus测试框架、DbUnit数据库单元测试工具、JMeter性能测试工具以及StrutsTest扩展,来实现一个全面的测试流程。...

    使用EJB+Struts1.3+Ant+Cactus+DbUnit+JMeter+StrutsTest实现测试4

    StrutsTest是Struts框架的测试工具,它扩展了JUnit,提供了方便的接口来测试ActionForm和Action类。通过StrutsTest,开发者可以直接在Action层面进行单元测试,而无需依赖整个Web应用环境。 将这些工具和技术整合在...

    Struts 1.2 如何测试ActionPDF

    **StrutsTest** 是一个专门用于简化Struts应用程序测试的工具。它扩展了JUnit框架,为测试Struts Action提供了便利。通过StrutsTest,开发者可以轻松创建用于测试Struts Action的模拟对象(mock objects)。这大大简化...

    StrutsTest for junit

    StrutsTest for JUnit 是一个专门针对Struts框架进行单元测试的工具,主要适用于Struts 1.2及更高版本。Struts是一个流行的开源MVC(Model-View-Controller)框架,广泛应用于Java Web开发中,它帮助开发者构建可...

    使用EJB+Struts1.3+Ant+Cactus+DbUnit+JMeter+StrutsTest实现测试3

    **DbUnit** 是一个数据库测试工具,它可以协助开发者在测试前后加载和清理数据库数据。DbUnit提供了一种结构化的数据格式(如XML或CSV),使得测试数据的管理变得简单,从而保证了测试的一致性和可重复性。 **...

    strutstest214源文件

    本源文件"strutstest214"是针对Struts框架进行单元测试的一个实例,主要涉及了JUnit测试库的运用。 JUnit是Java编程语言中的一个单元测试框架,用于编写和运行可重复的测试用例。在"strutstest214"中,我们可能看到...

    strutstest-2.1.3.jar

    用来测试struts的action的不错工具。

    struts-test-jars

    同时,Struts2提供了一些测试工具,如Struts2的TestNG或JUnit支持,可以帮助开发者编写和执行测试用例,确保每个组件或动作都能按预期工作。 在压缩包"struts2-test-jars"中,开发者可能会找到如Struts2的JUnit或...

    struts2-junit-plugin-2.1.8.1.jar

    然后,你可以创建JUnit测试类,使用`@StrutsTest`注解标记测试类,以指示该类属于Struts2测试。在测试方法上使用`@Test`注解,并可以使用`@Action(value = "your-action-name")`来指定要测试的Struts2 Action。 ...

    struts开发包

    8. ** strutstest 测试框架**:Struts提供了一个测试框架,使得开发者可以方便地进行单元测试和集成测试。 9. **Tiles框架集成**:Tiles是一个布局组件,Struts可以与之集成,用于创建复杂的页面布局。 10. **OGNL...

    struts_ts struts_ts

    12. ** strutstest**: 这可能是对Struts进行单元测试或集成测试的一种方式,可能涉及到模拟HTTP请求、配置测试环境等。 以上是对Struts框架的一些基本介绍和关键知识点,但具体的"struts_ts"可能需要更详细的信息...

    Struts1.2

    10. ** strutstest**:Struts1.2还提供了测试工具,帮助开发者进行单元测试和集成测试。 11. **Plug-in机制**:Struts1.2支持插件,可以方便地扩展功能,如Validator插件用于验证表单数据。 12. **ModelDriven接口...

    struts的入门学习

    10. ** strutstest工具**:Struts提供了TestStructs这样的测试工具,用于快速搭建Struts应用的测试环境,帮助开发者验证Action和ActionForm的正确性。 学习Struts,你需要了解和实践上述知识点,同时通过实际项目来...

    较全的struts1.3.8-apps

    8. ** strutstest 测试工具**:如果包含,可以学习如何利用它进行单元测试和集成测试。 总之,这个"较全的struts1.3.8-apps"压缩包是一个宝贵的资源,对于想深入了解和掌握Struts 1.3.8框架的开发者来说,它是实践...

    jakarta-struts-1.2.4

    它简化了开发过程,通过分离业务逻辑、数据模型和用户界面,提高了代码的可维护性和可测试性。Struts 1.2.4 是该框架的一个稳定版本,尽管后续已经发展到Struts 2,但仍然有很多遗留项目在使用。 **二、lib目录** ...

    struts2框架详细搭建教程

    以下内容将详细介绍如何创建项目、导入必要的JAR包、配置约束文件以及测试Struts2框架的基本功能。 #### 二、搭建环境 1. **开发工具**:Eclipse IDE for Java Web Developers。 2. **服务器**:Apache Tomcat 8或...

    eclipse+maven+struts2简单例子

    在压缩包文件"StrutsTest6"中,可能包含了工程的源代码、配置文件、测试类以及相关的资源文件。分析这些文件可以帮助你更好地理解和学习如何在实际项目中整合Eclipse、Maven和Struts2。 总之,这个例子展示了如何...

    struts in action

    10. **Plug-in机制**:Struts框架具有强大的插件扩展能力,允许开发者添加自定义的功能模块,如 strutstest 测试插件,用于单元测试。 11. **Validation框架**:Struts提供了内置的验证框架,可以对用户输入进行...

    struts 回顾

    压缩包中的"strutstest"和"strutsdemo"可能是两个示例项目,分别用于测试Struts的功能和演示其基本用法。通过分析这些示例,可以直观地了解Struts框架的工作流程,同时也可以学习如何配置和编写Action、ActionForm、...

    StrutsTestCase-2.1.4(含文档、源码、官方示例).rar

    StrutsTestCase是Apache Struts框架的一个扩展,它提供了一种集成测试工具,使得开发者能够方便地对基于Struts的应用程序进行单元测试和功能测试。这个压缩包“StrutsTestCase-2.1.4(含文档、源码、官方示例).rar...

Global site tag (gtag.js) - Google Analytics