私が大成功を収めて使用したアプローチの1つは、次の方法を使用することです。
- プロジェクトをビルドするMaven
- データベーススキーマを管理し、バージョン管理するLiquibase (またはFlyway)
- テストとともに開始されるインメモリデータベースとしてのH2 。
上記のいずれも使用していない場合は、そこで学ぶことがかなりありますが、私の経験では、それだけの価値がありました。これはSpringアプリケーションで非常にうまく機能しました。他の設定では、マイレージが異なる場合があります。
Mavenは、テストを実行する前に、メモリ内のH2データベースのインスタンスを開始する必要があります。Springアプリケーションでは、H2 JDBC URLを使用してデータソースを指定するだけで、自動的に起動します。
Liquibaseを使用して一連のXMLスクリプトを実行し、データベーススキーマを設定してから、別のファイルにテストデータを入力できます(Liquibaseの実行時に別のファイルを指定するか、context
それぞれの属性を使用しますchangeSet
)。これは、Mavenを使用するか、特定のLiquibaseBeanを使用してSpringで実行できます。
そこから、通常のアプリであるかのようにアプリケーションをテストできます。モックする必要はなく、結果としてはるかに有用なテストを取得できます。スキーマを変更するか、H2とネイティブRDBMS間のSQLの違いを回避する必要がある場合があります。
余談ですが、私はこの種のテストに大いに賛成です。私の経験では、すべてをモックすることは実際には興味深い洞察を得ることができず、ビルド内統合テストが不可能な場合の最後の手段になるはずです。しかし、私に反対する人はたくさんいます!