首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对Java Servlet进行单元测试

对Java Servlet进行单元测试
EN

Stack Overflow用户
提问于 2008-09-18 08:21:21
回答 6查看 53K关注 0票数 54

我想知道对servlet进行单元测试的最佳方法是什么。

只要不引用servlet上下文,测试内部方法就不是问题,但是测试doGet/doPost方法以及引用上下文或使用会话参数的内部方法又如何呢?

有没有一种方法可以简单地使用经典的工具,比如JUnit,或者最好是TestNG?我需要嵌入tomcat服务器或类似的东西吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-09-18 08:22:57

尝试HttpUnit,尽管您最终可能会编写更多的“集成测试”(模块的)而不是“单元测试”(单个类的)的自动化测试。

票数 13
EN

Stack Overflow用户

发布于 2008-09-18 08:43:28

您是否在单元测试中手动调用doPost和doGet方法?如果是这样的话,您可以覆盖HttpServletRequest方法来提供模拟对象。

myServlet.doGet(new HttpServletRequestWrapper() {
     public HttpSession getSession() {
         return mockSession;
     }

     ...
}

HttpServletRequestWrapper是一个方便的Java类。我建议您在单元测试中创建一个实用程序方法来创建模拟http请求:

public void testSomething() {
    myServlet.doGet(createMockRequest(), createMockResponse());
}

protected HttpServletRequest createMockRequest() {
   HttpServletRequest request = new HttpServletRequestWrapper() {
        //overrided methods   
   }
}

更好的做法是将模拟创建方法放在一个基本的servlet超类中,并进行所有servlet单元测试来扩展它。

票数 7
EN

Stack Overflow用户

发布于 2008-09-18 16:06:13

Mockrunner (http://mockrunner.sourceforge.net/index.html)可以做到这一点。它提供了一个模拟的J2EE容器,可用于测试Servlets。它还可以用于对其他服务器端代码进行单元测试,如EJB、JDBC、JMS、Struts。我自己只使用过JDBC和EJB功能。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/90907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档