[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 メーリングリストの案内