使用Cactus+Jetty進行servelt的單元測試
今天在做《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。