4

Mavenプロジェクトでは、PowerMock-easymockを使用してjUnitテストケースを実行しています。しかし、「mvn clean install」を実行しているときに、出力を下回っています。


テスト

TestSuiteの実行テストの実行:2、失敗:0、エラー:0、スキップ:0、経過時間:0.621秒

結果 :

テストの実行:2、失敗:0、エラー:0、スキップ:0


しかし、他にも多くのテストケースがあります。これがpom.xmlの一部です

<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.2</version>
        <scope>test</scope>
</dependency>
<dependency>
        <groupId>org.easymock</groupId>
        <artifactId>easymock</artifactId>
        <version>3.1</version>
        <scope>test</scope>
</dependency>
<dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-easymock-release-full</artifactId>
        <version>1.4.12</version>
        <type>pom</type>
</dependency>

PowerMockの依存関係を削除し、「mvn clean install」を実行すると、すべてのテストケースが正常に実行されます。しかし、私はPowerMockを使用する必要があります。この問題を解決するにはどうすればよいですか?

4

4 に答える 4

6

一部のテストケースが実行されていないようですが、これを試しましたか

  1. mvn surefireプラグインを使用し、その中にテストケースを含めます。

  2. powermock-module-junit4の依存関係を確認します。

    次のリンクを確認してください:code.google.com/p/powermock/wiki/EasyMock_maven http://code.google.com/p/powermock/wiki/GettingStarted

于 2013-01-07T12:09:38.530 に答える
2

私も同じ問題を抱えていて、理解するのに少し時間がかかりました。私のセットアップは古いバージョンのjboss.javassistをプルしていたため、奇妙なことにPowerMockRunnerがまったく機能していませんでした。

JUnitとTestNGが混在する環境もあることは注目に値します。私は以前に複数のsurefireプロバイダーを追加するソリューションを試しましたが、それも機能しませんでした(surefire 2.14.1を使用)。surefire 2.17にアップグレードした後、surefireプロバイダーを宣言する必要なしに、JUnitテストとTestNGテストの両方が実行を開始しました。実際、私はグループを使用しているため、JUnitプロバイダーがエラーをスローしました。どうやら、TestNGプロバイダーは自由形式のテキスト(「統合」など)を許可しますが、JUnitプロバイダーはクラスパス(「com.example.UnitTests」など)を期待します。

これが私のプラグインセクションです...

        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.17</version>
            <configuration>
                <groups>spring, unit, integration</groups>
                <systemPropertyVariables>
                    <java.awt.headless>true</java.awt.headless>
                    <org.apache.activemq.default.directory.prefix>target/test/</org.apache.activemq.default.directory.prefix>
                    <log4j.configuration>file:${project.basedir}/src/test/resources/log4j.properties</log4j.configuration>
                </systemPropertyVariables>
                <argLine>${surefire.args}</argLine>
            </configuration>
        </plugin>

...および関連するテスト部門..。

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.9.5</version>
        <scope>test</scope>
    </dependency>
    <!--
    PowerMock versions are compatible with specific Mockito versions.
    https://code.google.com/p/powermock/wiki/MockitoUsage13
     -->
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-module-junit4</artifactId>
        <version>1.5.4</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-api-mockito</artifactId>
        <version>1.5.4</version>
        <scope>test</scope>
    </dependency>
    <!-- without this PowerMock tests don't run in maven -->
    <dependency>
        <groupId>jboss</groupId>
        <artifactId>javassist</artifactId>
        <version>3.8.0.GA</version>
        <scope>test</scope>
    </dependency>
于 2014-03-20T16:08:01.320 に答える
0

Dipakによると、

解決策1:pom.xmlに以下のコードを追加します

<plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-surefire-plugin</artifactId>
       <version>2.13</version>
       <dependencies>
            <dependency>
                 <groupId>org.apache.maven.surefire</groupId>
                 <artifactId>surefire-junit47</artifactId>
                 <version>2.13</version>
            </dependency>
       </dependencies>
</plugin>

依存関係の正しいArtifactIdについては、jUnitを使用している場合にこのリンクが表示されます。

次に、「mvncleaninstall」を実行します

解決策2:pom.xmlに以下のコードを追加します

<properties>
    <powermock.version>1.5</powermock.version>
</properties>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-module-junit4</artifactId>
        <version>${powermock.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-api-easymock</artifactId>
        <version>${powermock.version}</version>
        <scope>test</scope>
    </dependency>

詳細については、このリンクを参照してください

すべてのクレジットはDipakに送られます

于 2013-01-07T13:01:45.977 に答える
0

最近、PowerMockテストが実行されたが、surefireカバレッジレポートに含まれていないという状況がありました。問題は計装に関係していることがわかりました。

ほとんどのテストはTestNGで実行されることに注意してください。一般に、JUnitは、PowerMockを活用する必要がある場合にのみ使用します。

POMスニペットは次のとおりです。

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
        <systemPropertyVariables>
            <org.apache.activemq.default.directory.prefix>target/test/</org.apache.activemq.default.directory.prefix>
            <log4j.configuration>file:${project.basedir}/src/test/resources/log4j.properties</log4j.configuration>
            <jacoco-agent.destfile>${project.basedir}/target/jacoco.exec</jacoco-agent.destfile>
        </systemPropertyVariables>
        <argLine>-Xmx512m -XX:MaxPermSize=256m -Djava.awt.headless=true</argLine>
    </configuration>
</plugin>
<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.7.5.201505241946</version>
    <executions>
        <execution>
            <id>instrument</id>
            <phase>process-classes</phase>
            <goals>
                <goal>instrument</goal>
            </goals>
        </execution>
        <execution>
            <id>restore</id>
            <phase>test</phase>
            <goals>
                <goal>restore-instrumented-classes</goal>
                <goal>report</goal>
            </goals>
        </execution>
    </executions>
</plugin>

<systemPropertyVariables>おそらく修正には関係ありません。

また、JaCoCoのドキュメントでは、必要な場合を除いて、このタイプの構成を使用しないように警告されていることに注意してください。

http://www.eclemma.org/jacoco/trunk/doc/instrument-mojo.html

警告:JaCoCoを使用したコードカバレッジ分析の推奨される方法は、オンザフライのインストルメンテーションです。オフラインインストルメンテーションにはいくつかの欠点があり、特定のシナリオでこのモードが明示的に必要な場合にのみ使用する必要があります。このモードを使用する前に、オフラインインストルメンテーションに関するドキュメントを参照してください。

于 2015-09-09T05:08:29.973 に答える