- - PR -
StrutsTestCase for JUnitのテスト実行が上手くいかない
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-02-20 18:14
Cuctusを使用しないでサーブレットとJSPのテストケースを作れと言われて苦戦しております
Strutsを使ってやろうとしたのしたのですが実行時にエラーが出てしまいます。 どうすれば良いかわからずに困っています誰か教えて下さい。 これ以外にJUnitでのサーバーのテストでよい方法があったらそれも教えて下さい import servletunit.struts.MockStrutsTestCase; public class ContributionCheckTest extends MockStrutsTestCase { public ContributionCheckTest(String arg0) { super(arg0); } public static void main(String[] args) { junit.swingui.TestRunner.run(ContributionCheckTest.class); } public void testDoGet() { setRequestPathInfo("./ContributionCheck"); addRequestParameter("test","test"); actionPerform(); } } のテストをJUnitで実行したところ 2004/02/20 17:37:57 org.apache.struts.util.PropertyMessageResources <init> 情報: Initializing, config='org.apache.struts.util.LocalStrings', returnNull=true 2004/02/20 17:37:58 org.apache.struts.util.PropertyMessageResources <init> 情報: Initializing, config='org.apache.struts.action.ActionResources', returnNull=true 2004/02/20 17:37:58 org.apache.struts.action.ActionServlet initServlet 致命的: null java.lang.NullPointerException at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:658) at org.apache.crimson.parser.Parser2.parse(Parser2.java:333) at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448) at org.apache.commons.digester.Digester.parse(Digester.java:1567) at org.apache.struts.action.ActionServlet.initServlet(ActionServlet.java:1433) at org.apache.struts.action.ActionServlet.init(ActionServlet.java:466) at javax.servlet.GenericServlet.init(GenericServlet.java:256) at servletunit.struts.MockStrutsTestCase.getActionServlet(MockStrutsTestCase.java:303) at servletunit.struts.MockStrutsTestCase.actionPerform(MockStrutsTestCase.java:371) at ContributionCheckTest.testDoGet(ContributionCheckTest.java:34) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) 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:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:392) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:276) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:167) 2004/02/20 17:37:58 servletunit.struts.MockStrutsTestCase getActionServlet 致命的: Error initializing action servlet javax.servlet.ServletException: java.lang.NullPointerException at org.apache.struts.action.ActionServlet.initServlet(ActionServlet.java:1441) at org.apache.struts.action.ActionServlet.init(ActionServlet.java:466) at javax.servlet.GenericServlet.init(GenericServlet.java:256) at servletunit.struts.MockStrutsTestCase.getActionServlet(MockStrutsTestCase.java:303) at servletunit.struts.MockStrutsTestCase.actionPerform(MockStrutsTestCase.java:371) at ContributionCheckTest.testDoGet(ContributionCheckTest.java:34) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) 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:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:392) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:276) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:167) と表示されました何がいけないんでしょう? 環境は j2sdk1.4.2 tomcat4.1 WEB-INF/lib/に置いてあるjarファイルは strutstest-2.1.0.jar , struts.jar , junit.jar ツールは eclipse2.1.2 です 誰か教えて下さい | ||||
|
投稿日時: 2004-02-20 18:25
StrutsTestCase を使うときは WEB-INF ディレクトリをクラスパスに通す必要がありますが通していますか?
http://strutstestcase.sourceforge.net/ >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. If you would like to use an alternate configuration file, please see the setConfigFile() method for details on how this file is located. [ メッセージ編集済み 編集者: インギ 編集日時 2004-02-20 18:25 ] | ||||
|
投稿日時: 2004-02-20 18:42
返信ありがとうございます
パスはEclipsのウィンドウ→設定→JAVA→クラス変数で CLASSPATH - C:/eclipse/plugins/strutstest/examples/WEB-INF と通していますがこれではいけなかったのでしょうか? | ||||
|
投稿日時: 2004-02-20 18:49
C:/eclipse/plugins/strutstest/examples
まででいいかもしれません。 | ||||
|
投稿日時: 2004-02-20 18:55
やってみましたがまだ同じエラーになります。
クラスパスの通し方が間違っているのでしょうか? JUnitの障害トレースではこのように表示されています。 junit.framework.AssertionFailedError: Error initializing action servlet: Unable to find /WEB-INF/web.xml. TestCase is running from C:\eclipse\workspace\ServletTest directory. Context directory has not been set. Try calling setContextDirectory() with a relative or absolute path. /WEB-INF/web.xml must be found under the context directory, the directory the test case is running from, or in the classpath. at junit.framework.Assert.fail(Assert.java:47) at servletunit.struts.MockStrutsTestCase.getActionServlet(MockStrutsTestCase.java:319) at servletunit.struts.MockStrutsTestCase.actionPerform(MockStrutsTestCase.java:371) at ContributionCheckTest.testDoGet(ContributionCheckTest.java:34) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) 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:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:392) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:276) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:167) | ||||
|
投稿日時: 2004-02-20 19:46
プロジェクトのパスは「C:\eclipse\workspace\ServletTest」のようですが、
プロジェクトの WEB-INF ディレクトリは本当に 「C:/eclipse/plugins/strutstest/examples」にあるのですか? 「C:\eclipse\workspace\ServletTest」内のどこかにあるのではないですか? | ||||
|
投稿日時: 2004-02-20 19:56
struts-conifg.xmlの存在するWEB-INFは
C:/Tomcat4.1/server/webapps/admin/WEB-INF と C:/eclipse/plugins/strutstest/examples/WEB-INF が存在していて C:\eclipse\workspace\ServletTest\WEB-INF にプロジェクトのクラスは存在しますが こちらにパスを通せば良いのでしょうか? ちなみにクラスパスの名前はCLASSPATHとしていますがこれは問題ないでしょうか? | ||||
|
投稿日時: 2004-02-20 20:37
web.xml と アクション "ContributionCheck" を定義している struts-config.xml は
「C:\eclipse\workspace\ServletTest\WEB-INF」にはないのですか? 例えば、 プロジェクトパス C:\eclipse\workspace\ServletTest WEB-INFパス C:\eclipse\workspace\ServletTest\WEB-INF struts-config.xml C:\eclipse\workspace\ServletTest\WEB-INF\struts-config.xml に「ContributionCheck」のアクションが定義されている の場合、 「ContributionCheckTest」は
というように私はします。 setContextDirectory でコンテキストディレクトリをセットします。 (この場合、プロジェクトパスそのもの) ちなみに「設定→JAVA→クラス変数」は パスを通すものではありません。 その変数名でクラスパスに追加できる為の設定です。(よね?) 説明が下手でごめんなさい。 [ メッセージ編集済み 編集者: yamamoto 編集日時 2004-02-20 20:39 ] | ||||
1
