gpt4 book ai didi

java - maven Surefire-junit47 未运行 JUnit4 测试

转载 作者:太空宇宙 更新时间:2023-11-04 09:32:05 25 4
gpt4 key购买 nike

在具有大量 JUnit 4 测试的 Maven 项目中,surefire-junit47 不执行测试。

本项目中没有testng测试,pom.xml中也没有testng。但是这个项目依赖于另一个在 pom.xml 中包含 testng 的项目。您可以在下面的 mvn -X 输出中看到它导入 testng。

为了引用,这里是我正在使用的文档: https://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html

这里有几个显示问题的 pom 配置。

鉴于此测试类组织:

- src/main/test/
- com.mycomp.qc.core.account
- CopyAccountTests.java
- CreateAccountTests.java
- DeleteAccountTests.java
- ListAccountTests.java
- ReadAccountTests.java
- UpdateAccountTests.java
- com.mycomp.qc.core.product
- CopyProductTests.java
- CreateProductTests.java
- DeleteProductTests.java
- ListProductTests.java
- ReadProductTests.java
- UpdateProductTests.java
- ..... and 300 more packages .....

并给出这个测试类结构:

package com.mycomp.qc.core.account;

import org.junit.Assert;
import org.junit.Test;
.... and more ....

public class CopyAccountTests {

@Test
public void copyAccount1() {
Assert.assertTrue("pass", true);
}

@Test
public void copyAccount2() {
Assert.assertTrue("fail", false);
}

.... and more ....

}

pom 配置 1:具体包括按模式进行的帐户测试

运行所有帐户测试,正如文档所示。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.version}</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>${surefire.version}</version>
</dependency>
</dependencies>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<includes>
<include>*Account*</include>
</includes>
<threadCount>1</threadCount>
</configuration>
<executions>
<execution>
<id>default-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>

pom 配置 2:具体包括按模式的帐户测试

运行所有帐户和产品测试,正如文档所示。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.version}</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>${surefire.version}</version>
</dependency>
</dependencies>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<includes>
<include>*Account*</include>
<include>*Product*</include>
</includes>
<threadCount>1</threadCount>
</configuration>
<executions>
<execution>
<id>default-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>

pom 配置 3:包含所有测试,基于默认的 Surefire

查找并初始化测试类,但不执行任何@Test方法。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.version}</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>${surefire.version}</version>
</dependency>
</dependencies>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<threadCount>1</threadCount>
</configuration>
<executions>
<execution>
<id>default-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>

pom 配置 4:按模式包含所有测试

查找并初始化测试类,但不执行任何@Test方法。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.version}</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>${surefire.version}</version>
</dependency>
</dependencies>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<includes>
<include>*Test*</include>
</includes>
<threadCount>1</threadCount>
</configuration>
<executions>
<execution>
<id>default-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>

我尝试过的:

  1. 显然,从示例来看,我在 pom.xml 中尝试了不同的包含模式。请参阅上面概述的结果。

  2. 配置了一个新项目,具有所有相同的导入和一些小测试。上述所有包含模式的行为均如文档中所述。

  3. 将surefire 提供程序切换为surefire-junit4。事实上,这执行了所有测试,但我们遇到了其他问题。

  4. 跑了mvn -X,主要是为了寻找testng问题,基于这个答案:Surefire is not picking up Junit 4 tests .

  5. mvn -X 显示默认的 maven-resources-plugin 会引入 junit 3.8.x,文档称这可能会导致问题。将资源更新到3.1.0,但并没有解决我的问题。

mnv -X 输出

太大了,无法包含在内。如果您想要其中的一部分,请询问。

最佳答案

事实证明,maven 实际上正在运行测试。我认为它没有运行测试的原因是 JunitCore() 在 4.7+ 中的工作方式发生了变化。

似乎junit4逐类处理测试类静态(和静态@Parameters方法),其中junit47处理所有静态,然后运行所有测试。所以你会得到:

junit4
- ClassA
- staticField1
- staticMethod1
- testMethod1
- ClassB
- staticField2
- staticMethod2
- testMethod2


junit47
- Initialize:
- ClassA
- staticField1
- staticMethod1
- ClassB
- staticField2
- staticMethod2
- ClassA
- testMethod1
- ClassB
- testMethod2

有关此问题的更多详细信息,来自比我更了解的人,在此线程中: https://issues.apache.org/jira/browse/SUREFIRE-1676?filter=-2

关于java - maven Surefire-junit47 未运行 JUnit4 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56971331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com