■
Spring + struts の単体テスト
spring 1.2.9
struts 1.3.8
strutstest 2.1.4
webコンテナ tomcat5.5
java jdk5.0
でいろいろ試しているのだけれども、エラーが出て回避できない.
web.xmlの読み込みに失敗
web.xmlの書き方が悪いらしく、strutstestのservletunit.struts.MockStrutsTestCaseを継承して
テストクラスを作成し、以下の通りsetUp()メソッドを実行
protected void setUp() throws Exception { super.setUp(); // コンテキストパスの指定 setContextDirectory(new java.io.File(".")); // Servletコンフィグファイル(web.xml)の指定 setServletConfigFile("/WEB-INF/web.xml"); ・・・ }
と書いてるけど、web.xmlを設定する箇所でエラーになってる.
エラーは以下のようなエラーが出力される.
tomcat5.5上でアプリは動作可能なのだが、strutstestではうまくいかねー ><。
いろいろ調査していくと、web.xmlの書き方が悪いことがわかった.
web.xml 要素リファレンス
のweb.xml詳細 要素の配置順
妥当性を検証するXML parserでは 要素の配置が間違っているとparseエラーになります。 図2に、ルート要素(web-app)の直接の子階層についてServlet 2.3仕様(DTD)に記載された出現順序を記します。
/ / 要素などは 記述位置に迷うことがありますが、この順番で記述しなければならない ということです。
とあり、
の配置順を直したら、web.xmlのパースまではできた.
2008-04-23 17:30:06,318 [main] DEBUG (MockStrutsTestCase.java:115) - Entering 2008-04-23 17:30:06,333 [main] DEBUG (MockStrutsTestCase.java:126) - Exiting 2008-04-23 17:30:06,333 [main] DEBUG (MockStrutsTestCase.java:527) - Entering - contextDirectory = . 2008-04-23 17:30:06,333 [main] DEBUG (MockStrutsTestCase.java:532) - Exiting 2008-04-23 17:30:06,333 [main] DEBUG (MockStrutsTestCase.java:583) - Entering - pathname = /WEB-INF/web.xml 2008-04-23 17:30:06,396 [main] ERROR (Digester.java:1635) - Parse Error at line 5 column 17: Document root element "web-app", must match DOCTYPE root "null". org.xml.sax.SAXParseException: Document root element "web-app", must match DOCTYPE root "null". at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.rootElementSpecified(Unknown Source) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(Unknown Source) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDispatcher.scanRootElementHook(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.commons.digester.Digester.parse(Digester.java:1765) at servletunit.struts.MockStrutsTestCase.setServletConfigFile(MockStrutsTestCase.java:603) at xxxxxxxxxxxxxx.dev.action.DevActionTest.setUp(DevActionTest.java:38) at junit.framework.TestCase.runBare(TestCase.java:128) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:120) at junit.framework.TestSuite.runTest(TestSuite.java:230) at junit.framework.TestSuite.run(TestSuite.java:225) at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) 2008-04-23 17:30:06,411 [main] ERROR (Digester.java:1635) - Parse Error at line 5 column 17: Document is invalid: no grammar found. org.xml.sax.SAXParseException: Document is invalid: no grammar found. at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(Unknown Source) at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$ContentDispatcher.scanRootElementHook(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.commons.digester.Digester.parse(Digester.java:1765) at servletunit.struts.MockStrutsTestCase.setServletConfigFile(MockStrutsTestCase.java:603) at xxxxxxxxxxxxxx.dev.action.DevActionTest.setUp(DevActionTest.java:38) at junit.framework.TestCase.runBare(TestCase.java:128) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:120) at junit.framework.TestSuite.runTest(TestSuite.java:230) at junit.framework.TestSuite.run(TestSuite.java:225) at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)