私は現在、私たちが持っているテスト フレームワークを磨いています。現在のニーズでは、複数のスプリング プロファイルをサポートし、毎回異なるプロファイルでテストを複数回実行する必要があります。各プロファイルは個別のテスト環境を対象としているため、異なるロジックを持つ異なるテスト セットを実行できます。
私はこのようなテストクラスを持っています:
@ContextConfiguration(locations = { "classpath:META-INF/test-context.xml" })
public class Test extends AbstractTestNGSpringContextTests {
@Autowired
ProfileSpeciticBean profileSpecificBean;
...
}
ここに、ProfileSpecificBean
別のクラスによって実装されるインターフェイスがあります。注入される実際の実装は、アクティブな Spring プロファイルによって決定され、Spring XML コンテキストを使用しています。コマンドを使用してMavenでプロジェクトを構築している-Dspring.profiles.active=profileName
ため、テストが渡されたプロファイルをキャッチすることを期待しています。
ただし、現在のテストは、完全なスタック トレース内で次のエラーで失敗します。
org.springframework.beans.factory.NoSuchBeanDefinitionException: 依存関係にタイプ ProfileSpeciticBean の適格な Bean が見つかりません: オートワイヤー候補として適格な少なくとも 1 つの Bean が予想され、0 が見つかりました
このトピックについて調べた結果、テスト クラスの上に注釈が必要であるAbstractTestNGSpringContextTests
ことがわかりました。@ActiveProfiles
したがって、このコードは機能します。
@ContextConfiguration(locations = { "classpath:META-INF/test-context.xml" })
@ActiveProfiles("profile1")
public class Test extends AbstractTestNGSpringContextTests ...
これの問題は、クラスでプロファイル名をハードコーディングするのを避けたいということです。コマンドライン スクリプトを変更するだけで、異なるプロファイルに対して同じテスト クラスを実行する必要があります。
上記は可能ですか?TestNG にコマンドライン プロファイルを認識させ、同じテストを再利用する方法はありますか? テストを実行するには、コードと構成の重複を避ける必要があるため、プロファイルごとに 2 つの Test クラスを作成することは望ましくありません。