JUnitでEasyMockとPowerMockを使用しています。使用されるカバレッジツールはECLEmmaです。 EasyMockを使用すると、カバレッジが緑色で適切に表示されます(カバーされているとおり)。ただし、PowerMockで単体テストされたコードの場合、カバレッジは赤(カバーされていない)で表示されます。ウェブで同様の質問を読んだことがあります。ただし、これに対する解決策があるかどうかを確認したかっただけです。
ありがとう
ベンカテッシュ
それは既知の問題です: https://github.com/jayway/powermock/issues/422
そしてそれは長い間、それはすぐに修正されません。
代わりに eCobertura を使用することをお勧めします。
はい、これには解決策があります。
最初に、このMaven依存関係を追加する必要があります。
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4-rule-agent</artifactId>
<version>1.6.4</version>
<scope>test</scope>
</dependency>
次に、このアノテーション@RunWith(PowerMockRunner.class)を使用する代わりに、次のようにTestクラスに@Ruleを追加するだけです。
public class Test {
@Rule
public PowerMockRule rule = new PowerMockRule();
このブログで詳細を確認できます PowerMockでEclEmmaテストカバレッジを機能させる
これは私のプロジェクトのほとんどの場合で機能しました:
_@Rule
public PowerMockRule rule = new PowerMockRule();
static {
PowerMockAgent.initializeIfNeeded();
}
_
@RunWith(PowerMockRunner.class)
を削除/コメントし、クラスパスに_powermock-module-javaagent-1.6.5.jar
_を追加した後、次のインポートを含めます。
_import org.junit.Rule;
import org.powermock.modules.junit4.rule.PowerMockRule;
import org.powermock.modules.agent.PowerMockAgent;
_
次に、右クリック->カバレッジの範囲->カバレッジの構成を選択し、引数に次の行を追加します。
_-ea -noverify -javaagent:path/to/powermock-module-javaagent-1.6.5.jar
_
[適用]-> [カバレッジ]をクリックします。
また、この場合_@Before
_は機能しないため、_@Test
_でマークされたメソッドから_@Before
_でマークされたメソッドにすべてのものを追加する必要があります。
モックする静的クラスがあります。静的クラスをモックすると、eclEmmaコードカバレッジプラグインはEclipseで機能しません。そこで、クラスの前に@RunWith(JUnit4.class)(@RunWith(PowerMockRunner.class)の代わりに)を配置し、クラス内に次の行を配置しました
static {
PowerMockAgent.initializeIfNeeded();
}
@Rule
public PowerMockRule rule = new PowerMockRule();
クラスをコンパイルし、テストクラスを実行しました。コードカバレッジはクラスで機能しています。この変更はEclipse IDEでのみ行われます。
テストケースを作成した後、コードを通常の状態に戻しました。 @RunWith(JUnit4.class)の代わりに@RunWith(PowerMockRunner.class)を配置し、静的コードとpowermockrule行の上にコメントしました。
powermock-module-javaagent
を使用して、JacocoでPowerMockカバレッジを生成することができました。
必ずpowermockエージェントafterjacocoエージェントを配置してください:
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>true</useSystemClassLoader>
<argLine>${jacocoArgLine} -javaagent:${settings.localRepository}/org/powermock/powermock-module-javaagent/${powermock.version}/powermock-module-javaagent-${powermock.version}.jar -noverify</argLine>
...
例を見たい場合は、このプロジェクトをご覧ください: https://github.com/jfcorugedo/sonar-scanner
ここで、ソナーは静的メソッドとPowerMockによってモックされたnew
ステートメントを考慮していることがわかります。
new
statementsをモックする場合は、PowerMockRule
の代わりにPowerMockRunner
を使用してください。
このテスト を見てください
Powermockバージョンを更新すると、以下の問題が修正されます。サポートされているバージョンのMaven依存関係です。
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4-rule-agent</artifactId>
<version>1.7.3</version>
<scope>test</scope>
</dependency>
お役に立てれば !!!