私はデータを収集しており、このデータを Java を使用して MySQL データベースに保存しています。さらに、プロジェクトのビルドには Maven を使用し、テスト フレームワークとして TestNG を使用し、データベースへのアクセスには Spring-Jdbc を使用します。データベースへのアクセスをカプセル化する DAO レイヤーを実装しました。DAO クラスを使用してデータを追加する以外に、データを集計して結果を他のテーブル (マテリアライズド ビューなど) に格納するクエリを実行したいと考えています。
ここで、DAO クラスが正常に機能しているかどうかをチェックするテストケースをいくつか書きたいと思います。したがって、いくつかのテスト データが入力されるインメモリ データベースを使用することを考えました。データの集計に MySQL 固有の SQL クエリも使用しているため、いくつかの問題が発生しました。
- まず、Spring-Jdbc が提供する組み込みデータベース機能を単純に使用して、組み込みデータベースをインスタンス化することを考えました。H2 実装を使用することにしました。そこで、MySQL 固有のコンテンツ (たとえば、DATE() などの時間操作関数) を使用する集計クエリが原因で、問題が発生しました。このアプローチのもう 1 つの欠点は、2 つの ddl ファイルを維持する必要があることです。つまり、MySQL でテーブルを定義する実際の ddl ファイルです (ここでは、エンコーディングを定義し、テーブルと列にコメントを追加します。どちらの機能も MySQL 固有です)。H2はコメントをサポートしていないため、同じテーブルを定義するがコメントなどを含まないテストddlファイル。
- テスト ケース内で使用できる組み込みデータベースとして MySQL を使用するための説明を見つけました (http://literatitech.blogspot.de/2011/04/embedded-mysql-server-for-junit-testing.html)。 . それは私にとって本当に有望に聞こえました。残念ながら、それは機能しませんでした: A MissingResourceExcpetion が発生しました "リソース '5-0-21/Linux-amd64/mysqld' が見つかりません". ドライバーがローカル マシンでデータベース デーモンを見つけられないようです。しかし、その問題の解決策を見つけるために何を探す必要があるのか わかりません。
今、私は少し立ち往生しており、アーキテクチャを別の方法で作成する必要があったかどうか疑問に思っています. 誰かが適切なシステムをセットアップする方法についていくつかのヒントを持っていますか? 他に 2 つのオプションを考えています。
- 組み込みデータベースを使用する代わりに、ネイティブの MySQL インスタンスを使用して、テストケースのみに使用されるデータベースをセットアップします。このオプションは遅く聞こえます。実際、後で CI サーバーをセットアップしたいと思うかもしれませんが、組み込みデータベースを使用する方がテストが高速に実行されるため、より適切であると考えました。
- SQL クエリから MySQL 固有のものをすべて消去し、H2 をテスト用の組み込みデータベースとして使用します。このオプションが正しい選択である場合、データをマテリアライズド ビューに集約する SQL クエリをテストする別の方法を見つける必要があります。
- または、私が考えていない3番目のオプションはありますか?
ヒントをいただければ幸いです。
ありがとう、XComp