ログ日記

作業ログと日記とメモ

DBが絡むテストとトランザクションの開始位置

データベースに作用するクラスの単体テストって普通はどうやるんだろう?
初めはテスト用のDaoクラスを作ってDBに接続せずに固定のオブジェクトを返すようにしてたんだけど、それを作るのが段々面倒になってきてやめた。
O/Rマッパー自体もテストしているんだから、これは信頼できるクラスとして利用してもいいかなーと。
テーブルごとにDaoのクラス名が違うからテスト別に分けられるようにはできているんだけども・・普段は自動生成しているDaoクラスを手動で書くのは大変だ。


だから今はsimpletestのコンストラクタでO/Rマッパーを取得し、setUp()メソッドでbegin()してtearDown()メソッドでabort()するようにした。
それに伴って、共通クラスの中でトランザクションを開始していたのを、メソッドの外(例えばアクションクラス)でトランザクションを開始するように修正。


最近は例外を使っているので、何かDBでエラーがあれば共通クラスの外でabort()する。
・・・という感じにした。一般的にはどこでトランザクションを開始するんだろう。そういうことって今まで読んだ本には書いてなかったなぁ。もしくは意識せずに素通りしていたのかも。
取り敢えずしばらくこの方針でやってみることにする。


欲を言えばaspectとかでトランザクションをプログラムの外に出したい。でもエラー処理まで含めたら余計にややこしくなるような予感が・・難しい。