[Seasar-user:19158] Re: removeActionForm=true時のS2ActionTestCaseを使ったテストコードについて
newta
[E-MAIL ADDRESS DELETED]
2010年 1月 20日 (水) 09:45:58 JST
遅くなりました。
newtaです。
http://d.hatena.ne.jp/newta/20100120
に修正したファイルへのリンクがありますのでよろしくお願いします。
問題の原因としてはActionWrapperのインスタンス生成を
S2ActionTestCase自前でやっていたのですが、
そこで設定が足りなかったようです。
修正したものは生成に関して本来のロジックを使用するように修正したので
問題は解消したのでは無いかと思います。
よろしくお願いします。
2010年1月14日20:32 中村洋 <[E-MAIL ADDRESS DELETED]>:
> お世話になっております、中村と申します。
>
> 以下のことをご教授いただければ幸いです。
>
> #長文、失礼いたします。
>
> ***********************
> 【内容】
> removeActionForm=trueが設定されているメソッドをS2ActionTestCase※を使い
> テストするとNullPointerExceptionが発生します。
>
> ※S2ActionTestCase
> id:newtaさんが「[Java][Seasar]SAStrutsのActionのバリデーションも
> UnitTestしちゃおうの巻」(http:
> //d.hatena.ne.jp/newta/20090810/1249920390)で公開している
> S2ActionTestCaseを継承したクラスです。
>
> 【関連コード】
> //◆Actionクラスのテスト対象メソッド(DeptAction.java)
> @Execute(validator = false, removeActionForm = true)
> public String sampleMethod(){
> return "sampleMethod";
> }
>
> //◆テストコード(DeptActionTest.java)
> public void testSampleMethod() {
> super.initAction(DeptAction.class);
>
> assertEquals(super.executeAction("sampleMethod"),"sampleMethod");
> assertNull(getErrors());
> }
>
> //◆Formクラス(DeptForm.java)
> import java.io.Serializable;
> @Component(instance = InstanceType.SESSION)
> public class DeptForm implements Serializable{
> private static final long serialVersionUID = 1L;
> public String id = "";
> }
>
> 上記の状態でテスト(DeptActionTest.java)を実施した際にエラー(スタックト
> レースは後述)となります。
>
> 【補足情報】
> ・バージョン(Doltengの情報から取得)
> Seasar2:2.4.39
> SAStruts:1.0.4-sp6
>
> ・removeActionFormを削除して実施した場合、エラーがなくテストが終了します。
> ・S2ActionTestCaseのexecuteActionを使わず、S2ActionTestCaseからActionク
> ラスのインスタンスを作って実行すれば、アノテーションに関わらず、エラーが
> なくテストが終了します。
> ・(仮説)removeActionForm要素はSessionを削除する処理だが、テスト実行時に
> はSessionオブジェクトが作成されていない。にも関わらず、Sessionオブジェク
> トを削除しようとするため、NullPointerエラーが発生しているのでは?と考え
> ています。
>
> ・ひがさんのコメント※に「S2TestCaseにはセッションオブジェクトはモックが
> 既に設定済み〜」とあり、これを使えば良いのかと思っていますが、その使い方
> が分かっていません。
> ※URL:http://d.hatena.ne.jp/unageanu/20070925/1190726776
>
> 【スタックトレース】
> java.lang.RuntimeException: java.lang.NullPointerException
> at
> org.seasar.struts.unit.S2ActionTestCase.executeAction(S2ActionTestCase.java:144)
> at
> jp.ne.sastruts.start2.action.DeptActionTest.testSampleMethod5(DeptActionTest.java:126)
> 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:597)
> at junit.framework.TestCase.runTest(TestCase.java:164)
> at
> org.seasar.framework.unit.S2FrameworkTestCase.doRunTest(S2FrameworkTestCase.java:519)
> at org.seasar.extension.unit.S2TestCase.doRunTest(S2TestCase.java:103)
> at
> org.seasar.framework.unit.S2FrameworkTestCase.runBare(S2FrameworkTestCase.java:308)
> 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.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
> at
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
> 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)
> Caused by: java.lang.NullPointerException
> at org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:143)
> at org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:87)
> at
> org.seasar.struts.unit.S2ActionTestCase.executeAction(S2ActionTestCase.java:141)
> ... 22 more
>
> ***********************
>
> 以上です。
> 何らかのヒント等いただけると幸いです。
>
> 失礼いたします。
>
> **************************************
> Name:Yoh Nakamura
> Mail:[E-MAIL ADDRESS DELETED]
> **************************************
>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
Seasar-user メーリングリストの案内