通常我们可以通过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"的场景中,我们看到`SampleServletTest`类正在使用Easymock来测试`SampleServlet`类的行为。以下是一些关键知识点: 1. **Easymock库**:Easymock是一个开源库,它提供了模拟Java对象的方法...
- 使用EasyMock,我们可以模拟HttpServletRequest和HttpServletResponse对象,这样就可以在没有真实HTTP环境的情况下测试Servlet。 - 我们可以设置期望,比如期望Servlet如何处理特定的请求参数,或者期望Servlet...
总的来说,Easymock 在Servlet单元测试中扮演了重要角色,它使得我们能够在控制环境中测试Servlet的参数处理逻辑,而无需实际的HTTP服务器。通过模拟 `HttpServletRequest` 并设定其行为,我们可以确保即使在复杂的...
使用`junit`和`easymock`对Servlet进行测试的一般步骤如下: 1. **导入依赖**:将junit4.4.jar和easymock-3.1.jar添加到项目的类路径中,以便在编译和运行测试时能使用这两个库。 2. **创建测试类**:为要测试的...
基本上,使用 EasyMock 或 Mockito 来模拟常用对象,例如 servlet api 中的对象,是一种真正的痛苦。 多年来,我为我的其他项目开发了这个库,并复制了其中的选定部分。 我厌倦了这样做,只想在未来的项目中“包含...
8. **测试与调试**: 使用proxy-servlet 可以简化多服务集成的测试过程,因为它允许开发者在本地环境中模拟远程服务的行为。这可以提高测试效率,减少对远程环境的依赖,并方便进行调试。 综上所述,"powermock-...
在Servlet的doGet()测试中,可以使用mock的HttpRequest和HttpResponse对象,而在Service层测试中,可以模拟DAO的接口,避免真实数据库交互。 在进行测试时,我们还需要关注测试结果的评估。通过测试报告可以了解...
- Spring TestContext框架支持模拟对象(如Mockito)和存根(如EasyMock),使得在测试中可以替换真实的依赖,从而隔离测试。 - 使用`@Autowired`和`@Qualifier`注解可以自动注入测试所需的bean,同时可以通过`@...
JUnit 测试添加到使用 EasyMock 库模拟的几种方法中。 提供 Ant 构建文件(最初使用 Tomcat 部署的服务器)。 客户端(Web 前端)使用 AJAX 请求和自定义 MVC 架构:使用 Q.js 进行承诺、使用 Sammy.js 路由、...
StrtusTest是junit的扩展,使用它,不需要启动servlet容器就可以方便的测试struts应用程序(容器外测试)。它也是属于使用Mock对象测试,但是与EasyMock不同的是,EasyMock是提供了创建Mock对象的API,而StrutsTest...
Tomcat是一款广泛使用的开源Java Servlet容器,它用于部署和运行Java Web应用程序。在某些情况下,可能需要通过命令行手动停止或启动Tomcat进程,例如进行系统维护、更新应用或解决性能问题。 在Linux或Unix环境中...
2. **easymock**: EasyMock是一个单元测试框架,允许开发者创建模拟对象来隔离测试代码。在Tomcat的源码测试中,它可能用于模拟复杂的协作对象。 3. **hamcrest-core**: Hamcrest是一个匹配对象的库,常用于单元...
6. **hamcrest-core-1.3.jar**:Hamcrest是一个匹配对象的库,通常与JUnit一起使用,提供更强大的断言功能,使得测试代码更加可读和自解释。 7. **jaxrpc.jar**:JAX-RPC(Java API for XML-based RPC)是Java平台...
Spring 的测试套件用到了 EasyMock,因此只有构建和运行测试套件时才用到这个 JAR,无需随你的应用一起发布。 freemarkerfreemaker.jar Spring 提供了 FreeMarker 模板引擎的包装类,还为把 FreeMarker 模板用作 ...
这意味着您可以不受限制地使用任何Java工具:JUnit,反射,Easymock,Mockito等。 编写测试如下所示: @Testpublic void clickOnButtonShouldDisplayMessageInLabel() { // Arrange SampleView view = new ...
EasyMock是一个模拟测试框架,它允许开发者创建和控制对象的行为,以便进行单元测试。通过EasyMock,可以轻松地模拟依赖对象,从而专注于测试目标代码的行为,而不是整个系统。 5. **Ehcache** Ehcache是一个广泛...
2. **构建环境**: 创建一个Maven项目,如`catalina_home`,并配置`pom.xml`文件,添加必要的依赖,包括Tomcat自身的模块和其他辅助测试库(如JUnit和EasyMock)。 3. **配置源码路径**: 在IDE中导入Tomcat源码,确保...
7. **测试**:在Spring2中,我们可以使用JUnit进行单元测试,结合`Mockito`或`EasyMock`进行依赖模拟,确保代码质量。 以上就是MyEclipse中配置Spring2的基本流程和相关知识点。虽然Spring已经发展到更高版本,但...