我々は、生産solrインデックスのデータを制御する必要があり、新しい開発との互換性が必要です。理想的には、ローカルマシン上でインデックスを嘲笑し、それを使ってクエリを実行し、単体テストを作成してより迅速な繰り返しを求めるクエリを作成したいと考えています。モッキングとユニットテストSolrとLuceneインデックス
RamDirectory is used in another question同様のことをするには2年前から質問があります。このexampleは、(RamDirectoryの代わりにFSDirectoryを使用して)これを行うように見えます。これらはこの問題の正しいアプローチですか?これを行うより良い方法はありますか?
私たちのようなテストを書きたいのですが:
setup mock index;
query mock index;
assert(stuff that should be true);
teardown mock index;
EDIT:その他の詳細:私たちの考えは、我々は、インデックスを構築するだろうだった
を、インデクサを必要とせずに文書を追加する簡単な方法を持っているし、システムの残りの部分、おそらくバージョン管理で保持できるローカルデータベースを除きます。以前はインデックスを作成していましたが、非互換性が発生したときに再生成しました。
インデックスを再作成するとオーバーヘッドが増え、インデクサーを嘲笑しても、インデクサーには検索可能なフィールドにデータを追加するなど、多くのデータ処理ロジックが含まれているため、 dbから)。私たちのインデクサーは外部のデータベースに接続するので、それもサポートする必要があります。オーバーヘッドがほとんどない上記のようなローカルテストデータベースを持つことができます。
テスト用のデータベースを取得したら、インデックスを作成してからsecond link aboveを削除する必要があります。問題は、テストのためにインデックスを実際にすばやく作成する方法、たとえば1000個のドキュメントのサイズになります。
これで問題は、ローカルのdbスキーマを本番スキーマと同期させておく必要があることです。プロダクションスキーマが頻繁に変更され、これが問題になります。私たちは、これを処理するのに十分な柔軟性を備えたテストインフラストラクチャを用意したいと考えています。今のようなアプローチは、遅くて他人を怒らせるたびにデータベースを再構築することです!
あなたはどのデータベースを使用していますか?私の推測は、遅いバックアップとリストアで有名なMySQLです。私たちはそのためにPostgresqlに切り替えました。 SQLServerには、高速バックアップ/リストア機能もあります。 –
Oracle、それはきわめて最適化されています – nflacco
私たちはこれについて少し話していましたが、1つの可能性はデータベース上でSELECT *を実行し、ハッシュにロードしてローカルにスキーマの問題がないように思えます。カラムがほとんど削除されることはありません。ユニットテストは、カラムが見つからない/指定されていない(ドキュメントを作成する)場合にうまく機能します。 – nflacco