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 后,我的 JUnit 和 TestNG 测试都开始运行,而无需声明任何 surefire 提供程序。事实上,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

根据迪帕克,

解决方案 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 ,则可以查看此链接。

然后执行“mvn clean install”

解决方案 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 测试,但未包含在可靠的覆盖率报告中。我们发现问题与仪器有关。

我会注意到我们的大多数测试都是使用 TestNG 运行的。一般来说,我们只在需要利用 PowerMock 时才使用 JUnit。

这是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 回答