最近、開発チームはプロジェクト管理とビルドサイクルのためにAntビルドファイルからMavenに移動しました。これまでのところ、私は結果に本当に満足しています。私はまだMavenを理解しているので、異常なビルド要件に対応する準備ができていません。
今、私は新しいプロジェクトを作成し、すぐに適切なMavenセットアップに取り掛かることに決めました。このプロジェクトは、実際にはJavaサービスプロバイダーインターフェイス(SPI)を使用してプラグイン可能な実装を検索するAPIです。実装は、通常のMETA-INF / services/ factorynameの方法で自分自身を登録できます。APIが作業の大部分を実行しますが、実際に役立つものを取得するには実装が必要です。
私の質問は今です:これのためのユニットテストを書くにはどうすればいいですか?2つの方法が思い浮かびました。
テストパッケージに簡単な実装を作成し、それをビルドしてから、単体テストに使用します。これは、Mavenプロジェクトのライフサイクルにうまく適合していないようです。
テスト実装を含む別のプロジェクトを作成します。これはSVNリポジトリ内の別のエントリを意味しますが、よりクリーンなアプローチのように感じます。プロジェクトは、メインAPIプロジェクトのテストサイクルでjarとしてビルドおよび使用できます。これは、メインプロジェクトのテストスコープを持つ依存関係アーティファクトとしてリストされる可能性があります。
どちらの場合も、根本的な問題があります...実装では、コンパイルするためにメインAPIが必要になります。結局のところ、APIの抽象ファクトリを実装するファクトリクラスが必要です。ただし、メインAPI、テストフェーズなどを適切に構築するには、テストの実装が必要になります。それは本当に循環依存の問題です。
Mavenでこれに対処するための良い方法は何ですか?Antでは、APIとそのテストの間に実装を構築するだけです。知っておくと役立つ場合は、SPIを少し悪用して、単一の実装ではなく、オブジェクトモデルのバンドルを見つけています。これはJAXPのようなものではなく、リソースを登録する方法のようなものです。