`
高级java工程师
  • 浏览: 404954 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用EasyMock测试Servlet

阅读更多
通常我们可以通过junit来对程序进行单元测试,但是单元的测试代码往往依赖于其他单元,如运行一个HttpServletRequest处理器的测试代码必须启动一个servlet容器。所有这些问题,都可以使用Mock Object来解决。
EasyMock提供了很方便的测试servlet的方法,基本步骤是
基本使用步骤
创建Mock对象的控制对象Control

从控制对象中获取所需要的Mock对象。

记录测试方法中所使用到的方法和返回值。

设置Control对象到“回放”模式。

进行测试。

在测试完毕后,确认Mock对象已经执行了刚才定义的所有操作。

[color=blue]下载地址 http://www.easymock.org
这里使用的是easymock2.0 for j2se5.0
使用例子
LoginServlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class LoginServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        // check username & password:
        if("admin".equals(username) && "123456".equals(password)) {
            ServletContext context = getServletContext();
            RequestDispatcher dispatcher = context.getNamedDispatcher("dispatcher");
            dispatcher.forward(request, response);
        }
        else {
            throw new RuntimeException("Login failed.");
        }
    }

}



对以上的servlet进行测试
java代码
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.http.*;
import static org.easymock.EasyMock.*;
import junit.framework.TestCase;

public class LoginServletTest extends TestCase {

    public void testLoginFailed() throws Exception {
        LoginServlet servlet = new LoginServlet();
        HttpServletRequest request = createMock(HttpServletRequest.class);
        expect(request.getParameter("username")).andReturn("admin");
        expect(request.getParameter("password")).andReturn("1234");
        replay(request);
        try {
            servlet.doPost(request, null);
            fail("Not caught exception!");
        } catch (RuntimeException re) {
            assertEquals("Login failed.", re.getMessage());
        }
        verify(request);
    }

    public void testLoginOK() throws Exception {
        // create mock:
        HttpServletRequest request = createMock(HttpServletRequest.class);
        final ServletContext contextObj = createMock(ServletContext.class);
        RequestDispatcher dispatcherObj = createMock(RequestDispatcher.class);

        // set behavior:
        expect(request.getParameter("username")).andReturn("admin");
        expect(request.getParameter("password")).andReturn("123456");
        expect(contextObj.getNamedDispatcher("dispatcher")).andReturn(
                dispatcherObj);
        dispatcherObj.forward(request, null);

        // done!
        replay(request);
        replay(contextObj);
        replay(dispatcherObj);

        // test:
        LoginServlet servlet = new LoginServlet() {

            private static final long serialVersionUID = 1L;

            public ServletContext getServletContext() {
                return contextObj;
            }
        };
        servlet.doPost(request, null);
        // verify:
        verify(request);
        verify(contextObj);
        verify(dispatcherObj);

    }
}[/color]

以上代码在eclipse 3.1+easymock2.0下测试通过
其中
expect(request.getParameter("username")).andReturn("admin")表示将username参数的返回值设为"admin".


分享到:
评论

相关推荐

    easymock测试servlet

    在"easymock测试servlet"的场景中,我们看到`SampleServletTest`类正在使用Easymock来测试`SampleServlet`类的行为。以下是一些关键知识点: 1. **Easymock库**:Easymock是一个开源库,它提供了模拟Java对象的方法...

    4-EasyMock-Servlet.rar

    - 使用EasyMock,我们可以模拟HttpServletRequest和HttpServletResponse对象,这样就可以在没有真实HTTP环境的情况下测试Servlet。 - 我们可以设置期望,比如期望Servlet如何处理特定的请求参数,或者期望Servlet...

    easymock-request.getParamsNames

    总的来说,Easymock 在Servlet单元测试中扮演了重要角色,它使得我们能够在控制环境中测试Servlet的参数处理逻辑,而无需实际的HTTP服务器。通过模拟 `HttpServletRequest` 并设定其行为,我们可以确保即使在复杂的...

    servlet测试jar包

    使用`junit`和`easymock`对Servlet进行测试的一般步骤如下: 1. **导入依赖**:将junit4.4.jar和easymock-3.1.jar添加到项目的类路径中,以便在编译和运行测试时能使用这两个库。 2. **创建测试类**:为要测试的...

    ServletApiMock:*** 正在建设中 *** 这是一个为 Servlet API 提供模拟的测试库

    基本上,使用 EasyMock 或 Mockito 来模拟常用对象,例如 servlet api 中的对象,是一种真正的痛苦。 多年来,我为我的其他项目开发了这个库,并复制了其中的选定部分。 我厌倦了这样做,只想在未来的项目中“包含...

    powermock-examples-documentationexamples-1.4.10.zip

    8. **测试与调试**: 使用proxy-servlet 可以简化多服务集成的测试过程,因为它允许开发者在本地环境中模拟远程服务的行为。这可以提高测试效率,减少对远程环境的依赖,并方便进行调试。 综上所述,"powermock-...

    junit mock

    在Servlet的doGet()测试中,可以使用mock的HttpRequest和HttpResponse对象,而在Service层测试中,可以模拟DAO的接口,避免真实数据库交互。 在进行测试时,我们还需要关注测试结果的评估。通过测试报告可以了解...

    Spring 2.5 TestContext

    - Spring TestContext框架支持模拟对象(如Mockito)和存根(如EasyMock),使得在测试中可以替换真实的依赖,从而隔离测试。 - 使用`@Autowired`和`@Qualifier`注解可以自动注入测试所需的bean,同时可以通过`@...

    simple-crm-rest-and-spa:使用 Servlets + Hibernate 持久性 + JUnit 测试 + SPA w 的 REST 服务。 AJAX 请求 + MVC 架构 + 更多的库和技术..

    JUnit 测试添加到使用 EasyMock 库模拟的几种方法中。 提供 Ant 构建文件(最初使用 Tomcat 部署的服务器)。 客户端(Web 前端)使用 AJAX 请求和自定义 MVC 架构:使用 Q.js 进行承诺、使用 Sammy.js 路由、...

    StrutsTest

    StrtusTest是junit的扩展,使用它,不需要启动servlet容器就可以方便的测试struts应用程序(容器外测试)。它也是属于使用Mock对象测试,但是与EasyMock不同的是,EasyMock是提供了创建Mock对象的API,而StrutsTest...

    Shell kill tomcat process

    Tomcat是一款广泛使用的开源Java Servlet容器,它用于部署和运行Java Web应用程序。在某些情况下,可能需要通过命令行手动停止或启动Tomcat进程,例如进行系统维护、更新应用或解决性能问题。 在Linux或Unix环境中...

    tomcat源码运行缺少jar

    2. **easymock**: EasyMock是一个单元测试框架,允许开发者创建模拟对象来隔离测试代码。在Tomcat的源码测试中,它可能用于模拟复杂的协作对象。 3. **hamcrest-core**: Hamcrest是一个匹配对象的库,常用于单元...

    tomcat-8.0依懒包

    6. **hamcrest-core-1.3.jar**:Hamcrest是一个匹配对象的库,通常与JUnit一起使用,提供更强大的断言功能,使得测试代码更加可读和自解释。 7. **jaxrpc.jar**:JAX-RPC(Java API for XML-based RPC)是Java平台...

    spring框架各jar包详解

    Spring 的测试套件用到了 EasyMock,因此只有构建和运行测试套件时才用到这个 JAR,无需随你的应用一起发布。 freemarkerfreemaker.jar Spring 提供了 FreeMarker 模板引擎的包装类,还为把 FreeMarker 模板用作 ...

    gwt-test-utils:gwt-test-utils是一个Java框架,允许以高效,简便的方式测试GWT客户端代码

    这意味着您可以不受限制地使用任何Java工具:JUnit,反射,Easymock,Mockito等。 编写测试如下所示: @Testpublic void clickOnButtonShouldDisplayMessageInLabel() { // Arrange SampleView view = new ...

    java常用Jar包

    EasyMock是一个模拟测试框架,它允许开发者创建和控制对象的行为,以便进行单元测试。通过EasyMock,可以轻松地模拟依赖对象,从而专注于测试目标代码的行为,而不是整个系统。 5. **Ehcache** Ehcache是一个广泛...

    S03-tomcat源码调试以及架构学习1

    2. **构建环境**: 创建一个Maven项目,如`catalina_home`,并配置`pom.xml`文件,添加必要的依赖,包括Tomcat自身的模块和其他辅助测试库(如JUnit和EasyMock)。 3. **配置源码路径**: 在IDE中导入Tomcat源码,确保...

    spring2配置

    7. **测试**:在Spring2中,我们可以使用JUnit进行单元测试,结合`Mockito`或`EasyMock`进行依赖模拟,确保代码质量。 以上就是MyEclipse中配置Spring2的基本流程和相关知识点。虽然Spring已经发展到更高版本,但...

Global site tag (gtag.js) - Google Analytics