JCRAPIを介してコンテンツリポジトリにアクセスするコードがあります。私のコードはOSGI環境で開発されています。私が欲しいのは、環境に関係なく単体テストの実行中に利用できるJCRコンテンツリポジトリを用意することです。つまり、プロジェクトをビルドするすべてのユーザーが利用できるようにする必要があります。別の仮想マシンで実行されている外部コンテンツリポジトリに依存したくありません。
そのようなことをすることは可能ですか?前もって感謝します。
JCRAPIを介してコンテンツリポジトリにアクセスするコードがあります。私のコードはOSGI環境で開発されています。私が欲しいのは、環境に関係なく単体テストの実行中に利用できるJCRコンテンツリポジトリを用意することです。つまり、プロジェクトをビルドするすべてのユーザーが利用できるようにする必要があります。別の仮想マシンで実行されている外部コンテンツリポジトリに依存したくありません。
そのようなことをすることは可能ですか?前もって感謝します。
また、Jackrabbit 実装によって提供される一時リポジトリも参照してください。(Jackrabbit 実装を使用していると仮定します) 一時リポジトリは
最初のセッションが開かれたとき、または最後のセッションが閉じられたときに、基になるリポジトリ インスタンスを自動的に初期化してシャットダウンするリポジトリ プロキシ。- API ドキュメント
こちらの例をご覧ください。インスタンスを作成するのは非常に簡単です。ローカル リポジトリであるため、ネットワークを経由する必要はありません。
私は通常、 setUpClass/BeforeClass フックで JUnit テスト クラスごとに一時リポジトリとセッションを 1 回作成し、 すべてのテスト ケースでそれを再利用して、セッションをクリーンアップします (たとえば、テスト ケース中に追加したノードを削除するなど)。テストケース。
ただし、一時リポジトリを使用する場合の欠点の 1 つは、ベース ディレクトリにいくつかのリポジトリ固有のファイル/ディレクトリが作成されることです。Maven を使用している場合は、解決策としてmaven-clean-pluginを使用して不要なファイルをクリーンアップできます。
Apache Sling のRepositoryTestBaseクラスは、「単体」テストで使用できるリポジトリを提供します。Sling との依存関係がいくつかあるため、そのまま使用できない場合もありますが、出発点としてはおそらく適切です。
H2のようなインメモリ データベースを処理できるインメモリ PMまたはデータベース永続性マネージャTransientRepository
とともに をMemoryFileSystem
使用します。