3

jdbc API(実際にはSpring jdbcテンプレート)を介してデータベースを使用するアプリケーションがあります。より多くの種類のデータベース(MS SQL、Oracle、Postgre)に対して単体テストを実行したいと考えています。したがって、指定されたデータベースごとに、単体テストを3回実行するテスト(たとえば、Mavenを使用)を実行します。

これをエレガントに解決するにはどうすればよいですか?

(私はJUnitランナーの独自の実装を考えていましたが、Spockテストもあります)

4

3 に答える 3

5

DBUnitから始める

DbUnitは、データベース駆動型プロジェクトを対象としたJUnit拡張機能(Antでも使用可能)であり、特に、テスト実行の間にデータベースを既知の状態にします。これは、1つのテストケースがデータベースを破損し、後続のテストが失敗したり、損傷を悪化させたりするときに発生する可能性のある無数の問題を回避するための優れた方法です。

データベースごとに個別のJdbcDatabaseTesterを使用します。単体テストなどはIDatabaseTesterにコーディングする必要があるため、すべてのデータベースで実行できます。

于 2011-11-23T10:11:44.570 に答える
4

基本的な問題は、異なるDB設定で同じテストを複数回実行する方法です。これは、テストフレームワークレベル(カスタムJUnitランナーまたはDBUnit / Unitils拡張機能など)またはビルドツールレベル(ビルドツールに十分な柔軟性がある場合)で実装できます。どちらの場合も、JUnitとSpockで動作する1つの実装を持つことが可能であるはずです。(ちなみに、SpockはUnitils統合をすぐに提供します)。

于 2011-11-24T23:53:20.013 に答える
2

正確には何をテストしていますか?JDBCを操作するJavaコード?データベーススキーマに対するSQLステートメント?答えに応じて、2つの戦略があります。

テストしているのがJavaコードの場合は、選択したモックフレームワーク(jMockitをお勧めします)を使用してJDBC接続をモックアップし、コードが適切なSQLステートメントを発行することを確認します。

データベーススキーマの場合は、SQLステートメントを準備し、最も便利な方法で選択したDBに送信できます(DBUnitは、この目的、SoapUI、またはその他のDB管理ツールにも使用できます)。

これらの2つの懸念事項を分離すると、各層に対してより単純で堅牢なテストが提供されます。

PS:JPAのような何らかの形式のORMの使用も検討してください

于 2011-11-23T12:12:52.697 に答える