実際にデータベースに対して単体テストを実行しますか?個人的には、これを避けようとします。これは、通常、テストがデータベースの状態に密接に関連しており、「ユニット」と処理したいすべての可能な状態を実際にテストできないことが多いためです。また、単体テストの実行に時間がかかる可能性がありますが、これは理想的ではありません。
別の方法は、 EasyMockやMockitoDataSource
などを使用してモックを作成することです。または、多くのテストで共通の動作を定義したい場合は、インターフェイスの独自のモック実装を作成することもできます。DataSource
DataSources
本当にデータベースを使用したい場合は、使用している実装DataSource
(たとえばOracleDataSource
)を手動でインスタンス化してから、これをクラスで使用することを検討する必要があります。
いずれの場合も、テストしているインスタンスでの設定を少し簡単にするために、コンストラクターまたはメソッドインジェクションの使用に切り替える必要があります。DataSource
(それ以外の場合は、リフレクションを使用してプライベート変数を設定する必要があります。)
たとえば、クラスは次のようになります。
public class DatabaseOperations {
private DataSource dataSource;
@Resource(name = "jdbc/Oracle")
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
}
そして、テストは次のようになります。
public class DatabaseOperationsTest {
public void testSomeOperation() {
DatabaseOperations databaseOperations = new DatabaseOperations();
databaseOperations.setDataSource(new MockDataSource());
}
}