[Seasar-user:18669] S2JUnit4にてCOOL Deployモードでエラーが発生する。

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2009年 10月 17日 (土) 18:29:41 JST


須藤と申します。
お世話になります。

S2JUnit4を使ったテストの実施でCOOL Deployの場合のみエラーが発生する問題についてご相談させてください。
S2JUnit4での設定が足りないのか、そもそも使用方法が誤っているのかをご指摘の上、アドバイスいただければ幸いです。
ちなみに、HOT DeployやWARM Deployでは問題なく実行ができました。


■現在の設定
seasarのバージョン:2.4.39

s2container.dicon

以下のように変更する。

    <include condition="#ENV == 'ut'" path="warmdeploy.dicon"/>

↓

    <include condition="#ENV == 'ut'" path="cooldeploy.dicon"/>


-------------------------------

s2junit4.dicon

初期設定のままです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components namespace="s2junit4">

<component name="context" class="org.seasar.framework.unit.impl.InternalTestContextImpl"/>

<component class="org.seasar.framework.unit.impl.DataAccessorImpl"/>

<component class="org.seasar.framework.unit.impl.ConfigFileIncluderImpl">
<initMethod name="addConfigFile">
<arg>"app.dicon"</arg>
</initMethod>
<initMethod name="addConfigFile">
<arg>context.testClassShortName + ".dicon"</arg>
</initMethod>
</component>

<component class="org.seasar.framework.unit.impl.TestDataPreparerImpl">
<initMethod name="addTestDataXlsPath">
<arg>context.testClassShortName + "_" + context.testMethodName + ".xls"</arg>
</initMethod>
<initMethod name="addTestDataXlsPath">
<arg>context.testClassShortName + ".xls"</arg>
</initMethod>
</component>

<component class="org.seasar.framework.unit.impl.ExpectedDataReaderImpl">
<initMethod name="addExpectedDataXlsPath">
<arg>context.testClassShortName + "_" + context.testMethodName + "_Expected" + ".xls"</arg>
</initMethod>
</component>
</components>

-------------------------------

テスト対象プログラム
(その他すべてのプログラムで同様の事象が発生しています。)


public class testbean {

private String test1;
private Integer test2;
public String getTest1() {
return test1;
}
public void setTest1(String test1) {
this.test1 = test1;
}
public Integer getTest2() {
return test2;
}
public void setTest2(Integer test2) {
this.test2 = test2;
}
}


-------------------------------

テストモジュール

import static org.seasar.framework.unit.S2Assert.*;

import org.junit.runner.RunWith;
import org.seasar.framework.unit.Seasar2;


@RunWith(Seasar2.class)
public class testbeanTest {

    public void testGetTest1() {
        testbean tb  = new testbean();
        tb.setTest1("aaaa");
        assertEquals("getterのテスト",tb.getTest1(),"aaaa");
    }



}

-------------------------------

■現象
上記設定にてS2Junit4実行時に以下のような例外が発生する。

java.lang.NullPointerException
at org.seasar.struts.customizer.ActionCustomizer.customize(ActionCustomizer.java:81)
at org.seasar.framework.container.customizer.CustomizerChain.doCustomize(CustomizerChain.java:140)
at org.seasar.framework.container.customizer.AbstractCustomizer.customize(AbstractCustomizer.java:145)
at org.seasar.framework.container.creator.ComponentCreatorImpl.customize(ComponentCreatorImpl.java:309)
at org.seasar.framework.container.creator.ComponentCreatorImpl.createComponentDef(ComponentCreatorImpl.java:269)
at org.seasar.framework.container.cooldeploy.CoolComponentAutoRegister.createComponentDef(CoolComponentAutoRegister.java:180)
at org.seasar.framework.container.cooldeploy.CoolComponentAutoRegister.processClass(CoolComponentAutoRegister.java:159)
at org.seasar.framework.util.ClassTraversal.traverseFileSystem(ClassTraversal.java:213)
at org.seasar.framework.util.ClassTraversal.traverseFileSystem(ClassTraversal.java:207)
at org.seasar.framework.util.ClassTraversal.forEach(ClassTraversal.java:79)
at org.seasar.framework.util.ResourcesUtil$FileSystemResources.forEach(ResourcesUtil.java:374)
at org.seasar.framework.container.cooldeploy.CoolComponentAutoRegister.registerAll(CoolComponentAutoRegister.java:129)
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:585)
at org.seasar.framework.util.MethodUtil.invoke(MethodUtil.java:96)
at org.seasar.framework.container.assembler.AbstractMethodAssembler.invoke(AbstractMethodAssembler.java:94)
at org.seasar.framework.container.assembler.DefaultInitMethodAssembler.assemble(DefaultInitMethodAssembler.java:49)
at org.seasar.framework.container.deployer.SingletonComponentDeployer.assemble(SingletonComponentDeployer.java:69)
at org.seasar.framework.container.deployer.SingletonComponentDeployer.deploy(SingletonComponentDeployer.java:48)
at org.seasar.framework.container.deployer.SingletonComponentDeployer.init(SingletonComponentDeployer.java:76)
at org.seasar.framework.container.impl.ComponentDefImpl.init(ComponentDefImpl.java:236)
at org.seasar.framework.container.impl.S2ContainerImpl.init(S2ContainerImpl.java:563)
at org.seasar.framework.container.impl.S2ContainerImpl.init(S2ContainerImpl.java:560)
at org.seasar.framework.unit.impl.SimpleInternalTestContext.initContainer(SimpleInternalTestContext.java:190)
at org.seasar.framework.unit.S2TestMethodRunner.initContainer(S2TestMethodRunner.java:461)
at org.seasar.framework.unit.S2TestMethodRunner.runMethod(S2TestMethodRunner.java:246)
at org.seasar.framework.unit.S2TestMethodRunner.run(S2TestMethodRunner.java:172)
at org.seasar.framework.unit.S2TestClassMethodsRunner.invokeTestMethod(S2TestClassMethodsRunner.java:227)
at org.seasar.framework.unit.S2TestClassMethodsRunner.run(S2TestClassMethodsRunner.java:89)
at org.seasar.framework.unit.S2TestClassRunner.run(S2TestClassRunner.java:67)
at org.seasar.framework.unit.Seasar2.run(Seasar2.java:168)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
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)



なお、同様の問題について下記サイトに掲載されていますが、
エラーの内容が異なっています。
http://ml.seasar.org/archives/seasar-user/2009-May/017474.html


以上、よろしくお願いします。





Seasar-user メーリングリストの案内