2011-08-08 9 views
3

データベースがダウンしているにもかかわらず、私はDBの独立したウェブレイヤコントローラをユニットテストしたいと思います。ユニットテスト中のdataSourceの模倣

ただし、指定されたDB資格情報でdataSource Beanで接続できないため、transactionManagerのBeanインスタンス化が失敗します。

また、私は削除したくない注釈を@Transactional@AfterTransaction@BeforeTransactionとしています。

ダミー(またはモック)dataSourceを定義する方法はありますか。データベースの資格情報を提供する必要はありませんが、私のtransactionManager Beanはインスタンス化されますか?

+0

代わりにderbyを使って統合テストを作成できますか? –

+0

も参照してください。この[モックトランザクションのコード例] [1] [1]:http://stackoverflow.com/questions/11783283/how-do-i-mock-a-transactionmanager-in- a-junit-test-container-outside-the-container – user1313150

答えて

0

使用dependency injection。これを行うための標準的で十分な文書化されたオプションが2つあります。

  1. Google Guiceなどのフレームワークを使用してください。これにはいくつかのオーバーヘッドがありますが、より優れたテスト可能なコードを作成するのに役立ち、スコープのようないくつかのクールな機能があり、特にウェブレイヤーに役立ちます。
  2. データソースパラメタまたはデータソースセッタメソッドをとるコンストラクタを追加して、独自のコードでDIを実装します。本番環境では、本番データベースをパススルー/設定しますが、単体テストでは操作/トランザクションを単に記録する模擬データソースを使用できます。
3

あなたが説明していることは、単体テストよりも統合テストです。ユニットテストの場合は、Springまたはトランザクションマネージャを起動しないでください。ちょうどあなたのコントローラをインスタンス化し、ユニットはそれをテストします。統合テストの場合は、単にH2 in-memory databaseを使用することを検討してください。 H2は非常に高速で(Derbyよりもはるかに高速)、データベースが必要なときのテストに優れています。

+0

おそらく、http://stackoverflow.com/questions/33612399/mock-the-spring-environment-object-in-junit-with-contextconfiguration/を参照してください。 33627425#33627425 –

関連する問題