0

私は現在、私たちが持っているテスト フレームワークを磨いています。現在のニーズでは、複数のスプリング プロファイルをサポートし、毎回異なるプロファイルでテストを複数回実行する必要があります。各プロファイルは個別のテスト環境を対象としているため、異なるロジックを持つ異なるテスト セットを実行できます。

私はこのようなテストクラスを持っています:

@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 クラスを作成することは望ましくありません。

4

2 に答える 2

1

より正確な答えを得るには、スタックトレースとメイン構成の一部 (テスト Bean に置き換えられるはずの Bean を宣言した場所) を追加することをお勧めします。

一般的な考え方は次のとおりです。

プロファイルに応じて PropertyPlaceholderConfigurer を変更したいとしましょう。

手順:

  1. PropertyPlaceholderConfigurer を含む main-config.xml を作成し、それを profile="default" でマークします。
  2. PropertyPlaceholderConfigurer のテスト実装を使用して test-config.xml を作成します
    (test-config.xml を profile="MyTestProfile" でマークするか、PropertyPlaceholderConfigurer のみを profile="MyTestProfile でマークすることを忘れないでください)。
  3. test-config.xml と main-config.xml の両方をテストにインポートするよりも

 

 @ContextConfiguration(locations = { "classpath:META-INF/main-config.xml","classpath:META-INF/test-config.xml" })
 @ActiveProfiles("MyTestProfile")
 public class Test extends AbstractTestNGSpringContextTests {}

それはうまくいくはずです。幸運を。

于 2014-08-04T09:07:31.293 に答える
1

JunitユニットテストのJVMパラメータを設定する方法に従ってみてください。テストを実際に実行する VM のシステム変数を設定します。これは、maven を実行するものと同じではありません。

そこでプロフィールを設定します。

Maven システム パラメーターを使用して、maven の呼び出しから設定することができます (または Maven プロファイルを使用します)。

于 2014-08-04T10:25:41.323 に答える