[Seasar-user:20715] [S2Junit4]テストケースでの自動トランザクション制御

石川雅之 - エクスマート [E-MAIL ADDRESS DELETED]
2011年 4月 7日 (木) 13:11:18 JST


お世話になっております。石川と申します。

S2Junit4を使ったテストケースで、テストメソッドの実行後に
トランザクションがロールバックしてくれず、困っております。
テスト対象のコンポーネントはrequiredTx設定でトランザクションが
開始されていますが、テストメソッドの開始時にトランザクションが
開始されていないようです。

何か設定漏れがあるかと思うのですが、もしおわかりになりましたら
ご教授頂ければと思います。
diconファイルとテストクラスのソースを本メールの最後に記載させて
頂きます。

少し気になっている点が1つあります。
S2Junit4のリファレンスでは、各テストクラス毎にテスト用のdiconファイルを
作成するという記述が見受けられましたが、こちらが原因でしょうか。
(読み間違いであれば申し訳ございません。)
テストでも本番と同じdiconファイルを使用したいと思っておりますので、
この点についてもアドバイス頂ければと思います。

以下、各種ソースになります。


--------------------------------------------------------------------------
□SampleTest.java□

@RunWith(Seasar2.class)
@TxBehavior(value = TxBehaviorType.ROLLBACK)
public class SampleTest {

	private TestContext ctx;

	private XxxManager xxxManager;


	@TxBehavior(value = TxBehaviorType.ROLLBACK)
	public void test_テストメソッド() throws Exception {

		xxxManager.addData( ... );
	}

}
--------------------------------------------------------------------------
□app.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>

	<include path="convention.dicon"/>
	<include path="s2jdbc.dicon"/>
	<include path="j2ee.dicon"/>
	<include path="dxo.dicon"/>

	<!-- DI設定 -->

	<component class="org.seasar.framework.container.autoregister.ComponentAutoRegister">
		<initMethod name="addReferenceClass">
			<arg>@[E-MAIL ADDRESS DELETED]</arg>
		</initMethod>
		<initMethod name="addClassPattern">
			<arg>"aaa.bbb.ccc.impl"</arg>
			<arg>".*ManagerImpl"</arg>
		</initMethod>
	</component>

	<!-- インターセプターの定義 -->
	<component name="exceptionLogging" class="aaa.bbb.ccc.util.interceptor.ExceptionLoggingInterceptor">
	</component>


	<!-- インターセプターチェインの定義 -->
    	<component name="domainInterceptorChain" class="org.seasar.framework.aop.interceptors.InterceptorChain">
	    	<initMethod name="add"><arg>exceptionLogging</arg></initMethod>
		<initMethod name="add"><arg>j2ee.requiredTx</arg></initMethod>
	</component>


	<!-- インターセプターチェインの設定 -->
	<component class="org.seasar.framework.container.autoregister.AspectAutoRegister">
		<property name="interceptor">domainInterceptorChain</property>
		<initMethod name="addClassPattern">
			<arg>"aaa.bbb.ccc.impl"</arg>
			<arg>".*ManagerImpl"</arg>
		</initMethod>
	</component>

</components>

--------------------------------------------------------------------------
□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.SimpleInternalTestContext"/>

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

</components>
--------------------------------------------------------------------------

以上、宜しくお願い致します。

石川


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