<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    emu in blogjava

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      171 隨筆 :: 103 文章 :: 1052 評(píng)論 :: 2 Trackbacks

     
    junit不能測struts的action,httpunit也只能測servlet。用struts作項(xiàng)目的時(shí)候無法方便的對(duì)action層做單元測試一直是我的心頭大恨。現(xiàn)在好了,我們有了StrutsTestCase。按照網(wǎng)上的介紹,StrutsTestCase用起來應(yīng)該是非常簡單的,只要下了jar包回來引用到工程里面就可以了。實(shí)際上可能也差不多--如果你運(yùn)氣不象我這么臭的話。


    在sourceforge上隨便挑其中一個(gè)鏡象的下載地址:
    http://aleron.dl.sourceforge.net/sourceforge/strutstestcase/strutstest213-1.2_2.4.zip

    flashget回來,放到j(luò)builder的userhome里面,找一個(gè)struts action創(chuàng)建test case,創(chuàng)建的時(shí)候吧test case的基類改為 MockStrutsTestCase,測試的方法一個(gè)都不用選(因?yàn)槲覀兪且槍?duì)action的具體每一個(gè)邏輯分支測試而不是具體的某一個(gè)方法)。創(chuàng)建成功后添加一個(gè)測試:

      public void testSuccessfulRefresh()
      {
        setRequestPathInfo("/RefreshSystemData");
        actionPerform();
        verifyForward("success");
      }

    嘿嘿,我精心挑了一個(gè)沒有參數(shù)的action來實(shí)驗(yàn)。

    一切看起來很順利。run test,噩夢開始了:

    java.lang.NullPointerException
     at servletunit.struts.MockStrutsTestCase.getActionServlet(MockStrutsTestCase.java:331)
     at servletunit.struts.MockStrutsTestCase.tearDown(MockStrutsTestCase.java:130)
     at hospital.tongren.oa.system.action.TestRefreshSystemDataAction.tearDown(TestRefreshSystemDataAction.java:34)
    ...(Click for full stack trace)...

    還好我沒有開音箱,不然又是一大炮轟出來。

    看來要調(diào)試了,先去同一個(gè)地方下了StrutsTestCase原碼回來
     http://aleron.dl.sourceforge.net/sourceforge/strutstestcase/strutstest-213-src.zip

    加進(jìn)userhome里面的source。debug進(jìn)去,跟到org.apache.struts.action.ActionServlet里面,出錯(cuò)的地方是:

            InputStream input =
                getServletContext().getResourceAsStream("/WEB-INF/web.xml");

            try {
                digester.parse(input);

            } catch (IOException e) {
    ....

    input 為空指針。不知道為什么ServletContextSimulator在模擬ServletContext的時(shí)候沒能夠正確的找到webmodule的位置。上網(wǎng)搜了好一會(huì)兒文檔,在 http://strutstestcase.sourceforge.net/api/servletunit/struts/MockStrutsTestCase.html 中發(fā)現(xiàn)了這樣一段:

    NOTE: By default, the Struts ActionServlet will look for the file WEB-INF/struts-config.xml, so you must place the directory that contains WEB-INF in your CLASSPATH. ...

    先照它說的試試把webmodule路徑放進(jìn)classpath中,沒有用。
    往下看,發(fā)現(xiàn)了這個(gè)好東東:setContextDirectory。在startup中加一句:

    this.setContextDirectory(new File("E:\\projectPath\\webModulePath\\"));

    終于把那個(gè)空指針給過了。但是報(bào)一個(gè)新的異常:

    junit.framework.AssertionFailedError: received error 400 : Invalid path /RefreshSystemData was requested

     at servletunit.HttpServletResponseSimulator.sendError(HttpServletResponseSimulator.java:463)

     at org.apache.struts.action.RequestProcessor.processMapping(RequestProcessor.java:684)

     at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:242)

     at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)

     at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)

     at servletunit.struts.MockStrutsTestCase.actionPerform(MockStrutsTestCase.java:394)

     at hospital.tongren.oa.system.action.TestRefreshSystemDataAction.testSuccessfulRefresh(TestRefreshSystemDataAction.java:51)

    ...(Click for full stack trace)...


    找不到strutsconfig里面配置的path。strutsconfig是在web.xml里面配置的,應(yīng)該還是web.xml沒找到造成的,那么就指定strutsconfig文件的位置咯:
        setConfigFile("E:\\......\\struts-config.xml");

    終于可以運(yùn)行起來了。

    隨后發(fā)現(xiàn),如果  setServletConfigFile("E:\\....\\WEB-INF\\web.xml");的話MockStrutsTestCase也能夠根據(jù)web.xml中的配置找到strutsconfig文件。

    最后把上面用到的絕對(duì)地址E:\\...全部改為相對(duì)地址:
        setContextDirectory(new File("modulePath\\"));
        setServletConfigFile("modulePath\\WEB-INF\\web.xml");
        //   this.setConfigFile("modulePath\\WEB-INF\\config\\system\\struts-config.xml");

    血吐完了,繼續(xù)郁悶,為什么別人都不用配置的這么麻煩呢?到底我做錯(cuò)了什么,還是jbuilder的錯(cuò)?

    CactusStrutsTestCase也沒配起,好像要加個(gè)什么包吧,再看看先。


    [點(diǎn)擊此處收藏本文]
    發(fā)表于 2005年01月22日 4:04 PM

    emu 發(fā)表于2005-01-22 8:00 PM  
    http://jakarta.apache.org/cactus/getting_started.html 中有詳細(xì)的說明。感覺確實(shí)復(fù)雜了一點(diǎn)。現(xiàn)在進(jìn)展是:

    org.apache.cactus.util.ChainedRuntimeException: Failed to get the test results at [http://localhost:8083/TongRenOA/ServletRedirector]

    at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody0(DefaultHttpClient.java:92)

    at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest_aroundBody1$advice(DefaultHttpClient.java:206)

    at org.apache.cactus.internal.client.connector.http.DefaultHttpClient.doTest(DefaultHttpClient.java)

    at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runWebTest(HttpProtocolHandler.java:159)

    at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody0(HttpProtocolHandler.java:80)

    at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest_aroundBody1$advice(HttpProtocolHandler.java:206)

    at org.apache.cactus.internal.client.connector.http.HttpProtocolHandler.runTest(HttpProtocolHandler.java)

    at org.apache.cactus.internal.client.ClientTestCaseCaller.runTest(ClientTestCaseCaller.java:144)

    at org.apache.cactus.internal.AbstractCactusTestCase.runBareClient(AbstractCactusTestCase.java:215)

    at org.apache.cactus.internal.AbstractCactusTestCase.runBare(AbstractCactusTestCase.java:133)

    ...(Click for full stack trace)...

    下班先。

    posted on 2005-05-16 18:52 emu 閱讀(277) 評(píng)論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 很黄很色很刺激的视频免费| 在线观看免费无码专区| 人成午夜免费视频在线观看| 久久精品亚洲综合| 中国国语毛片免费观看视频| 亚洲无码黄色网址| 亚洲精品视频免费| 亚洲国产日韩在线视频| 国产成年无码久久久免费| 久久久久亚洲精品成人网小说| 日本在线免费观看| 亚洲高清中文字幕综合网| 日本视频一区在线观看免费| 亚洲成AV人片久久| 精品熟女少妇AV免费观看| 亚洲国产精品嫩草影院| 又粗又大又猛又爽免费视频| 四虎影视在线看免费观看| 国产亚洲一区二区三区在线观看| 精品国产一区二区三区免费| 亚洲AV无码一区二区乱孑伦AS| 色欲国产麻豆一精品一AV一免费 | 超清首页国产亚洲丝袜| 一本大道一卡二大卡三卡免费| 久久久久久久尹人综合网亚洲| 免费91最新地址永久入口 | 亚洲成a人在线看天堂无码| 九九免费观看全部免费视频| 国产精一品亚洲二区在线播放| 一级毛片免费毛片一级毛片免费 | a级片免费在线观看| 日韩亚洲Av人人夜夜澡人人爽| 噼里啪啦免费观看高清动漫4| 亚洲码欧美码一区二区三区| 亚洲综合另类小说色区色噜噜| 日韩免费人妻AV无码专区蜜桃| 亚洲粉嫩美白在线| 久久精品国产亚洲7777| 日韩插啊免费视频在线观看| 亚洲av日韩专区在线观看| 国产成人毛片亚洲精品|