4

プロジェクトでは、カバレッジレポートを生成するemmaを構成しました。静的メソッドのいくつかをモックするためにPowerMockを導入するまで、セットアップ全体は正常に機能していました。

@RunWith(PowerMockRunner.class)でクラスにアノテーションを付けると、emmaはカバレッジプロセスを再開しようとし、addressbind例外をスローします。Mavenのsurefireは別のランナー用に新しいJVMをフォークしており、emmaは新しいJVMで再起動を試みていると思います。

surefire forkModeのさまざまなオプションを試しましたが、役に立ちません。 Running util.HttpClientFactoryTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.154 sec Running xxx.util.ServiceConnectorUtilTest EMMA: collecting runtime coverage data ... java.net.BindException: Address already in use: JVM_Bind at java.net.PlainSocketImpl.socketBind(Native Method) at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:383)

これを回避する方法についてのアイデアはありますか?どんな助けでも大いに感謝しました。ありがとう

4

2 に答える 2

2

maven を使用するために emma プラグインのバージョンを指定しない場合、デフォルトで

<groupId>org.sonatype.maven.plugin</groupId>
<artifactId>emma-maven-plugin</artifactId>
<version>1.0</version>

ビルドタグに最新バージョン1.2(または1.1)を指定すると

<build>
  <pluginManagement>
      <plugins>
          <plugin>
              <groupId>org.sonatype.maven.plugin</groupId>
              <artifactId>emma-maven-plugin</artifactId>
              <version>1.0</version>
          </plugin>
      </plugins>
  </pluginManagement>...

問題は消えるはずです

于 2012-06-27T09:11:35.463 に答える
0

emma プラグイン バージョンのバンプはプレーンな Java プロジェクトで機能する可能性がありますが、com.amazon.emma-droid の最新の Android バージョンにはまだこの修正がありません。

この問題は、少なくとも 2 つの異なる JunitClassRunners (たとえば、デフォルトのものと @RunWith(PowerMockRunner.class)) を使用する場合にのみ発生します。RobolectricTestRunner の使用を開始したときに、同じ問題に直面しました。回避策は、モジュール内のすべてのテスト ケースに同じ JunitClassRunner を使用することです。たとえば、PowerMock を使用しない単純な JUnit に対しても @RunWith(PowerMockRunner.class) を使用します。

于 2014-04-15T21:25:02.293 に答える