[Seasar-user:19135] Re: [S2JUnit4+S2JDBC]batch.Taskクラスのトランザクションのテストを行うには?

yossy [E-MAIL ADDRESS DELETED]
2010年 1月 15日 (金) 17:16:46 JST


中村(taedium)様

お世話になります。yossyです。
回答いただきありがとうございます。

> execute()がnullになっているのは戻り値が存在しないことを
> 示しています。(executeメソッドの戻り値の型がvoidですよね)

あ、そうでした。(^^A;

>
> S2JUnit4では、デフォルトで
> トランザクションの自動開始とロールバックを行います。
> この挙動を変更したい場合は、テストメソッドに
> @TxBehaviorをつけてください。
> http://s2container.seasar.org/2.4/ja/S2JUnit4.html#txBehaviorAnnotation
>
>
確かに、
@RunWith(Seasar2.class)
public class HogeTest {

    @TxBehavior(TxBehaviorType.COMMIT)
    public void testExecuteBatch() {
        TaskController tc = new TaskController();

        try {
            // タスクの生成
            SingletonS2ContainerFactory.init();
            HogeTask task = SingletonS2Container.getComponent(HogeTask.class);
            tc.setTask(task);
            // タスクの実行
            int result = tc.execute();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
のようにすると、
DEBUG 2010-01-15 16:10:51,799 [main]
トランザクションをコミットしました。tx=[FormatId=4360, GlobalId=1263539444252/1,
BranchId=]
とのメッセージが出ます。
が、実際にはinsertされていません。

> テストでデータをコミットしてしまうと、
> データをクリアする処理が別途必要になってしまうので
> テストでは常にロールバックしておくのがいいんじゃないでしょうか?
> バッチということなので、
> タスクが正常終了したか異常終了したかは
> ステータスコードで判別するのがいいのではと思います。

というより、HogeEntityServiceクラスの実際のinsertHogeの中に、
パラメータを表示するログを入れているのですが、全く表示されません。
それで実際に値を入れてみたいと思ったわけです。
public class HogeEntityService extends AbstractService<HogeEntity> {
    public void insertHoge(Map<String, String> mapData) throws Exception {
    	System.out.println("insertHoge in.");
    	
        try {
            HogeEntity hogeEntity = new HogeEntity();
            HogeEntity.aaa = mapData.get("aaa");
            ~中略~

            /* DBにインサート */
            int hogeEntityCount = insert(hogeEntity);

        } catch (Exception e) {
            e.printStackTrace();
        }
    	System.out.println("insertHoge out.");

    }

何か呼び出し方に問題があるのでしょうか?
実際はHoge()の中で、XMLから取りだした値をMapに入れてinsertHoge()を呼び出します。


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