在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。如何解决这个问题?
答案 0 :(得分:6)
我猜你的一些测试用例没有运行,你试试这个
确保powermock-module-junit4的依赖性。
查看以下链接:code.google.com/p/powermock/wiki/EasyMock_maven http://code.google.com/p/powermock/wiki/GettingStarted
答案 1 :(得分:2)
我遇到了同样的问题,我花了一段时间才弄明白。我的设置是拉入旧版本的jboss.javassist,这奇怪地阻止了PowerMockRunner的工作。
值得注意的是,我还有一个混合的JUnit / TestNG环境。我之前尝试过添加多个surefire提供程序的解决方案,但这也没有用(使用surefire 2.14.1)。升级到surefire 2.17后,我的JUnit和TestNG测试都开始运行,无需声明任何可靠的提供商。事实上,JUnit提供商为我犯了一个错误,因为我使用的是组。显然,TestNG提供程序允许自由格式文本(例如&#34;集成&#34;),而JUnit提供程序需要类路径(例如&#34; com.example.UnitTests&#34;)。
这是我的插件部分......
<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>
答案 2 :(得分: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>
对于依赖的Correct ArtifactId,如果使用jUnit,则可以看到此link。
然后执行“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>
有关详细信息,请参阅此link
所有学分都归Dipak
答案 3 :(得分: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进行代码覆盖率分析的首选方法是 即时仪表。离线仪器有几个 缺点,只应在明确的特定情况下使用 需要这种模式。请参阅离线文档 使用此模式前的仪器。