web-dev-qa-db-ja.com

Powermockと一緒のJUnitパラメーター化テスト-どのように?

私は、PowerMockと一緒にJunit4でパラメーター化されたテストを実行する方法を理解しようとしてきました。問題は、PowerMockを使用するには、テストクラスを次のように装飾する必要があることです。

@RunWith(PowerMockRunner.class)

パラメータ化されたテストを使用するには、装飾する必要があります

@RunWith(Parameterized.class)

私が見ることができることから、それらは相互に排除されているように見えます!?これは本当ですか?これを回避する方法はありますか? PowerMockで実行されているクラス内にパラメーター化されたクラスを作成しようとしました。このようなもの:

@RunWith(PowerMockRunner.class)
class MyTestClass {
     @RunWith(Parameterized.class)
     class ParamTestClass {
          // Yadayada
     }
}

しかし、残念ながら、これはあまり役に立ちません... ParamTestClassはまだPowerMockサポートで実行されません(それほど驚くことではないかもしれません)...そして私はアイデアが不足しているので、助けはありません大歓迎です!

更新:将来のグーグルについては、以下も参照してください: RunWithなしでPowerMockを使用しますか?

40
Anders Hansson

私も同じ問題を抱えていました。残念ながら、私が持っていたJVMのために、PowerMockルールを使用できませんでした。ルールの代わりに、RunnerDelegateを使用しました。

@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(Parameterized.class)
29
Abercrombieande

はい、これはPowerMockを使用して機能します Rule JUnit4.7以降を使用している場合に使用できます。

15
Johan

一度に2つのクラスランナーを使用することはできないため、それを実現するには、必ず独自のテストランナーを作成する必要があります。

Powermockについては何も知りませんが、10秒間の調査の結果、1つの解決策は、powermockのクラスローダーを使用してパラメーター化されたテストを実行するテストランナーを作成することであるように見えます。カスタムテストランナー内からパラメーター化されたテストランナーに委任する方法を理解できる場合は、それが最善の策かもしれません。

0
Sean Reilly