10

私はデータを収集しており、このデータを Java を使用して MySQL データベースに保存しています。さらに、プロジェクトのビルドには Maven を使用し、テスト フレームワークとして TestNG を使用し、データベースへのアクセスには Spring-Jdbc を使用します。データベースへのアクセスをカプセル化する DAO レイヤーを実装しました。DAO クラスを使用してデータを追加する以外に、データを集計して結果を他のテーブル (マテリアライズド ビューなど) に格納するクエリを実行したいと考えています。

ここで、DAO クラスが正常に機能しているかどうかをチェックするテストケースをいくつか書きたいと思います。したがって、いくつかのテスト データが入力されるインメモリ データベースを使用することを考えました。データの集計に MySQL 固有の SQL クエリも使用しているため、いくつかの問題が発生しました。

  1. まず、Spring-Jdbc が提供する組み込みデータベース機能を単純に使用して、組み込みデータベースをインスタンス化することを考えました。H2 実装を使用することにしました。そこで、MySQL 固有のコンテンツ (たとえば、DATE() などの時間操作関数) を使用する集計クエリが原因で、問題が発生しました。このアプローチのもう 1 つの欠点は、2 つの ddl ファイルを維持する必要があることです。つまり、MySQL でテーブルを定義する実際の ddl ファイルです (ここでは、エンコーディングを定義し、テーブルと列にコメントを追加します。どちらの機能も MySQL 固有です)。H2はコメントをサポートしていないため、同じテーブルを定義するがコメントなどを含まないテストddlファイル。
  2. テスト ケース内で使用できる組み込みデータベースとして MySQL を使用するための説明を見つけました (http://literatitech.blogspot.de/2011/04/embedded-mysql-server-for-junit-testing.html)。 . それは私にとって本当に有望に聞こえました。残念ながら、それは機能しませんでした: A MissingResourceExcpetion が発生しました "リソース '5-0-21/Linux-amd64/mysqld' が見つかりません". ドライバーがローカル マシンでデータベース デーモンを見つけられないようです。しかし、その問題の解決策を見つけるために何を探す必要があるのか​​ わかりません。

今、私は少し立ち往生しており、アーキテクチャを別の方法で作成する必要があったかどうか疑問に思っています. 誰かが適切なシステムをセットアップする方法についていくつかのヒントを持っていますか? 他に 2 つのオプションを考えています。

  1. 組み込みデータベースを使用する代わりに、ネイティブの MySQL インスタンスを使用して、テストケースのみに使用されるデータベースをセットアップします。このオプションは遅く聞こえます。実際、後で CI サーバーをセットアップしたいと思うかもしれませんが、組み込みデータベースを使用する方がテストが高速に実行されるため、より適切であると考えました。
  2. SQL クエリから MySQL 固有のものをすべて消去し、H2 をテスト用の組み込みデータベースとして使用します。このオプションが正しい選択である場合、データをマテリアライズド ビューに集約する SQL クエリをテストする別の方法を見つける必要があります。
  3. または、私が考えていない3番目のオプションはありますか?

ヒントをいただければ幸いです。

ありがとう、XComp

4

2 に答える 2

2

インメモリ MySQL データベースを機能させることができない場合は、「単純な」テストに H2 データベースを使用し、MySQL固有のクエリをテストするために専用の MySQL インスタンスを使用することをお勧めします。

さらに、実際の MySQL データベースのテストは、通常の Maven ビルドの一部にならないように、別の Maven プロファイルで統合テストとして構成できます。CI サーバーでは、MySQL テストを定期的に (毎日または数時間ごとなど) 実行する追加のジョブを作成できます。このようなセットアップを使用すると、通常のビルドの速度が低下することなく、製品固有のクエリを保持およびテストできます。テスト データベースが利用できない場合でも、通常のビルドを実行できます。

maven-failsafe-pluginと呼ばれる統合テスト用の素敵な Maven プラグインがあります。テストの前にテスト データをセットアップし、テスト後にデータベースをクリーンアップするために使用できる、統合前後のテスト ステップを提供します。

于 2012-07-08T14:17:34.233 に答える