[原創]基于驗證框架的action的測試

          當引用了驗證框架的時候,測試 action 的時候,程序會自動去找驗證框架進行驗證,那么如何進行這種情況下的 action 測試呢?經過一天的研究,發現必須先將驗證所需要的 xml 文件夾在進去,然后才能夠順利的進行!具體的實施如下:

          ??? protected void setUp() throws Exception {

          ??????? super .setUp();

          ??????? // set WEB-INF directory

          ??????? setContextDirectory( new File( "WebContent" ));

          ??????? // set struts- test -config.xml

          ??????? setConfigFile( "/WEB-INF/test/struts-test-config.xml" );

          ???????

          ??????? // set request's attribute for test

          ??????? // 創建一個 MessageResourcesFactory 類,目的是得到下面的 MessageResources, 作為其中的一個參數

          MessageResourcesFactory messageResourcesFactory = new PropertyMessageResourcesFactory();

          // 獲得 MessageResources

          MessageResources messageResources = new PropertyMessageResources(messageResourcesFactory, "org.apache.struts.action.ActionResources" );? ?
          ?
          getActionServlet().getServletContext().setAttribute( "org.apache.commons.validator.VALIDATOR_RESOURCES" ,getResources());

          ???????? ???????????????????????? ?
          getActionServlet().getServletContext().setAttribute( "org.apache.struts.action.MESSAGE" ,messageResources);

          ??? }

          ?

          以下的方法為了得到一個 MessageResources ,是從 org.apache.struts.validator. ValidatorPlugIn 中的 initResources ()方法得到的!

          /**

          ? * get the validator resources.

          ? *

          ? * @throws IOException ????? if an input/output error is encountered

          ? * @throws ServletException if we cannot initialize these resources

          ? */

          protected ValidatorResources getResources() throws IOException, ServletException {

          String pathnames = "/WEB-INF/validator-rules.xml,/WEB-INF/test/struts-test-config.xml" ;

          ??????? StringTokenizer st = new StringTokenizer(pathnames, "," );

          ?

          ??????? List streamList = new ArrayList();

          ??????? try {

          ??????????? while (st.hasMoreTokens()) {

          ??????????????? String validatorRules = st.nextToken().trim();

          ??????????????? if (log.isInfoEnabled()) {

          ??????????????????? log.info( "Loading validation rules file from '" + validatorRules + "'" );

          ??????????????? }

          ?

          ??????????????? InputStream input =getActionServlet().getServletContext().getResourceAsStream(validatorRules);

          ???????????????

          ??????????????? // If the config isn't in the servlet context, try the class loader

          ??????????????? // which allows the config files to be stored in a jar

          ??????????????? if (input == null ) {

          ??????????????????? input = getClass().getResourceAsStream(validatorRules);

          ??????????????? }

          ?

          ??????????????? if (input != null ) {

          ??????????????????? BufferedInputStream bis = new BufferedInputStream(input);

          ??????????????????? streamList.add(bis);

          ??????????????? } else {

          ??????????????????? throw new ServletException( "Skipping validation rules file from '"

          ??????????????????????????? ? + validatorRules + "'.? No stream could be opened." );

          ??????????????? }

          ??????????? }

          ??????????? int streamSize = streamList.size();

          ??????????? InputStream[] streamArray = new InputStream[streamSize];

          ??????????? for ( int streamIndex = 0;streamIndex < streamSize;streamIndex++) {

          ??????????????? InputStream is = (InputStream) streamList.get(streamIndex);

          ??????????????? streamArray[streamIndex] = is;

          ??????????? }

          ?

          ??????????? return new ValidatorResources(streamArray);

          ??????? } catch (SAXException sex) {

          ??????????? log.error( "Skipping all validation" ,sex);

          ??????????? throw new ServletException(sex);

          ??????? } finally {

          ??????????? Iterator streamIterator = streamList.iterator();

          ??????????? while (streamIterator.hasNext()) {

          ??????????????? InputStream is = (InputStream) streamIterator.next();

          ??????????????? is.close();

          ??????????? }

          ??????? }

          ??? }

          ?

          通過這樣的配置以后,就可以正常的對于 action 進行測試了!

          posted on 2006-03-17 13:31 扭轉乾坤 閱讀(256) 評論(0)  編輯  收藏 所屬分類: 測試相關

          <2006年3月>
          2627281234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆分類(31)

          隨筆檔案(30)

          文章分類(32)

          文章檔案(33)

          相冊

          PHP小站-首頁

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 乐业县| 肇源县| 蓬溪县| 清苑县| 外汇| 时尚| 衡阳县| 金寨县| 郁南县| 循化| 大埔县| 平谷区| 阿拉善盟| 崇仁县| 确山县| 沈丘县| 清丰县| 衢州市| 资讯 | 蒙自县| 丰原市| 海淀区| 甘泉县| 偃师市| 万荣县| 奇台县| 阜康市| 于都县| 阳泉市| 青川县| 九台市| 会宁县| 闽清县| 安岳县| 紫云| 塘沽区| 马鞍山市| 漯河市| 武鸣县| 沅江市| 中江县|