当前位置: 首页 > 知识库问答 >
问题:

并非所有jUnit测试用例都在使用PowerMock和easymock、Surefire为Maven项目运行

钮鸿煊
2023-03-14

在Maven项目中,我使用PowerMock easymock运行jUnit测试用例。但是,在进行“mvn清洁安装”时,我的输出低于。。

运行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。如何解决这个问题?

共有3个答案

夹谷星剑
2023-03-14

据迪帕克说,

解决方案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清洁安装”

解决方案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所有

龙俊美
2023-03-14

我也有同样的问题,我花了一段时间才弄明白。我的安装程序正在引入一个旧版本的jboss。javassist,它奇怪地阻止了PowerMockRunner的工作。

值得注意的是,我也有一个混合的JUnit/TestNG环境。我以前尝试过添加多个surefire提供程序的解决方案,但也不起作用(使用surefire 2.14.1)。升级到surefire 2.17后,我的JUnit和TestNG测试都开始运行,而不需要声明任何surefire提供程序。事实上,JUnit提供程序给我抛出了一个错误,因为我正在使用组。显然,TestNG提供程序允许自由形式的文本(例如“集成”),而JUnit提供程序期望类路径(例如“com.example.单元测试”)。

这是我的插件部分...

        <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>
越运锋
2023-03-14

我猜你的一些测试用例没有运行,你试过这个吗

>

  • 使用mvn surefire插件,并在其中包含测试用例。

    确保powermock模块的依赖性。

    查看以下链接:代码。谷歌。com/p/powermock/wiki/EasyMock_mavenhttp://code.google.com/p/powermock/wiki/GettingStarted

  •  类似资料:
    • 它是可以配置surefire插件只运行一些测试并行和其他顺序? 也可以使用surefireforkCount来运行声明为jUnit Suite的并行测试吗?

    • 我有一个包含JUnit 4和JUnit 5测试的Maven项目。 我使用的是版本<code>3.0.0-M07<code>中的Maven Surefire插件。Maven依赖关系树中提供了以下相关依赖关系(我使用<code>mvn依赖关系:树): 根据JUnit 5留档,JUnit Vintage Engine需要存在才能执行JUnit 4测试。 然而,Maven Surefire插件同时执行JU

    • 我有一个Java JUnit Selenium测试框架来运行一些测试。有两个类,每个类有两个测试。 我有专家肯定火像这样配置 我希望它同时运行4个测试,但是无论我使用什么组合的、和设置,我似乎一次只能运行1个类的测试用例。看起来这应该行得通,有人能提供解决方案吗?

    • 我有一个Java应用程序,它使用Gradle作为构建系统。这是多项目构建(几个Java项目)。 当我运行时,有些测试失败了,我注意到并不是所有的测试都在运行。 如果我将以下代码添加到中,它确实会运行所有测试,但当然,构建的代码总是成功完成: 我有两个问题: gradle是否在第一次失败后停止执行测试? 是否有一种方法可以运行所有测试(即使在一些测试失败时),并且如果其中一些测试失败,构建的测试仍然

    • 如果我使用,如下所示: 然后,当测试执行第一次开始时,所有的web驱动程序都填满了,但是它很快就开始删除并一次执行一个驱动程序。 所以我的问题是: null

    • 我有3个maven项目。项目1,项目2 为此,我在项目2 pom.xml文件中添加了这个 我的pom。Project3的xml是- 在项目3中,我添加了testng。xml文件来运行测试。现在如果我运行这个测试。xml文件,那么我所有的测试用例都成功运行了。如果我尝试使用maven测试运行测试用例,那么它会失败。 我已经在下面的pom文件中包含了testng.xml文件,以便使用maven运行te