一般的な回答
あなたが言及している2番目のタイプのテストは統合テストです。アプリケーションが存在する環境を正しく設定する必要があるため、これらを記述するのは常に少し難しくなります。一般に、次の 3 つの手順が必要です。
- 環境のセットアップ (データベース インストール スクリプトの実行など)
- 統合テストを実行する
- ステップ1からすべてをクリーンアップ
必要に応じて、ビルド スクリプトで手順 1 と 3 を実行するか、テスト クラスでコーディングするかを決定する必要があります。たとえば、あるアプローチの方がクリーンで移植性が高いことがわかる場合があります。
あなたの場合の解決策
あなたの場合、ステップ「1 - 環境のセットアップ」では、java.ext.dirs
環境変数が正しく設定された新しい Java VM をフォークする必要があり、ステップ「3 - クリーンアップ」では、フォークされた JVM が終了することを確認するだけです。ビルド ファイルは次のようになります。
- メインコードをコンパイルする
- テストコードをコンパイルする
- 単体テストの実行 (タイプ 1)
- 新しい VM をフォークして、統合テストを実行します。
Ant でこれを行うことを選択した場合、「統合テストの実行」は次のようになります。
<target name="extensionIntegrationTest">
<java classname="your.integration.TestClass" fork="true" failonerror="true">
<classpath refid="..." />
<arg value="..." />
<!-- ... more parameters -->
<jvmarg value="-Djava.ext.dirs=path/to/your/extension.jar"/
</java>
</target>
Ant Javaタスクのドキュメントも参照してください。Gradle に切り替える場合 (通常は非常に良いアイデアです)、Gradle の深いAnt 統合を利用するか、JavaExec
taskを使用できます。
この場合、ビルド ファイルを使用してテストを実行することをお勧めしますが、Java コードにすべてを含め、テスト クラスから新しい JVM をフォークする場合は、ProcessBuilderを使用します。とりわけ、これにはJAVA_HOME
環境変数を読み取る必要があります。