今天在做《Junit In Action》关于cactus和jetty结合进行集成测试的例子,看看源代码很简单,但总是运行不起来,一波三折了好几个小时才搞定。我用的cactus是1.8.1,闲言少叙,上源代码,就2个类:
待测试的servlet:
package junitbook.container; import javax.servlet.http.HttpServlet; public class SampleServlet extends HttpServlet if (session == null) |
测试类:
package junitbook.container; import org.apache.cactus.ServletTestCase; public class TestSampleServletIntegration extends ServletTestCase public static Test suite() TestSuite suite = new TestSuite("All tests with Jetty"); protected void setUp() public void testIsAuthenticatedNotAuthenticated() public void beginIsAuthenticatedNoSession(WebRequest request) |
有几点要说明:
1.测试类要继承ServletTestCase,内置了session,request,response,可直接用
2.jetty不要用单独下载的版本,每个cactus发行版都内置了一个jetty,在lib目录下可以找到,显然是改写过的,如果你用单独下载的,一定会抛出java.lang.NoSuchMethodException: org.mortbay.jetty.nio.SelectChannelConnector.setPort(java.lang.String),因为在单独的jetty发行版中,setPort用的参数是int,所以会抛异常,不知cactus为什么要这样搞。
3.还要依赖commons codec这个jar
4.如果jetty是5.x,用Jetty5XTestSetup,如果是6.x,用Jetty6XTestSetup,不过当前这个cactus用的还是jetty5.1.9(org.mortbay.jetty-5.1.9.jar),所以就用Jetty5XTestSetup。
就这些,jetty启动很快,过段时间还要研究一下怎么来测试struts2。
最新内容请见作者的GitHub页:http://qaseven.github.io/