qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          使用Cactus+Jetty進行servelt的單元測試

          今天在做《Junit In Action》關于cactus和jetty結合進行集成測試的例子,看看源代碼很簡單,但總是運行不起來,一波三折了好幾個小時才搞定。我用的cactus是1.8.1,閑言少敘,上源代碼,就2個類:

            待測試的servlet:

          package junitbook.container;

          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpSession;

          public class SampleServlet extends HttpServlet
          {
              public boolean isAuthenticated(HttpServletRequest request)
              {
                  HttpSession session = request.getSession(false);

                  if (session == null)
                  {
                      return false;
                  }
                 
                  String authenticationAttribute =
                      (String) session.getAttribute("authenticated");
                     
                  return Boolean.valueOf(
                      authenticationAttribute).booleanValue();
              }
          }




            測試類:

          package junitbook.container;

          import org.apache.cactus.ServletTestCase;
          import org.apache.cactus.WebRequest;

          public class TestSampleServletIntegration extends ServletTestCase
          {
              private SampleServlet servlet;   

              public static Test suite()
              {
                  System.setProperty("cactus.contextURL", "http://localhost:8080/test");// 這步很重要,一定要有

                  TestSuite suite = new TestSuite("All tests with Jetty");
                  suite.addTestSuite(TestSampleServletIntegration.class);
                  return new Jetty5XTestSetup(suite);
              }

              protected void setUp()
              {
                  servlet = new SampleServlet();
              }
              
              public void testIsAuthenticatedAuthenticated()
              {
                  session.setAttribute("authenticated", "true");
                  
                  assertTrue(servlet.isAuthenticated(request));
              }

              public void testIsAuthenticatedNotAuthenticated()
              {
                  assertFalse(servlet.isAuthenticated(request));
              }

              public void beginIsAuthenticatedNoSession(WebRequest request)
              {
                  request.setAutomaticSession(false);
              }
              
              public void testIsAuthenticatedNoSession()
              {
                  assertFalse(servlet.isAuthenticated(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。

          posted on 2013-09-22 11:09 順其自然EVO 閱讀(251) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2013年9月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 佛山市| 杭州市| 彭阳县| 泸溪县| 龙岩市| 博野县| 江永县| 喀什市| 前郭尔| 黄浦区| 京山县| 宜黄县| 甘洛县| 聂拉木县| 盘山县| 上蔡县| 彭泽县| 江都市| 龙游县| 嵊州市| 万荣县| SHOW| 久治县| 米易县| 东乡县| 莫力| 天台县| 会东县| 孟村| 潞城市| 云安县| 天气| 灵山县| 西乌珠穆沁旗| 江阴市| 蒙山县| 石渠县| 酉阳| 东辽县| 九台市| 建湖县|