ChatGPT解决这个技术问题 Extra ChatGPT

使用 maven 运行单个测试方法

我知道您可以使用以下命令运行某个类中的所有测试:

mvn test -Dtest=classname

但我想运行一个单独的方法, -Dtest=classname.methodname 似乎不起作用。

我也有兴趣知道如何做到这一点。但是,如果我发现自己经常这样做,我认为该测试可能会被拆分到自己的类中,因此您可以使用 mvn test -Dtest=classname 语法。
你想知道如何只通过命令行来做吗?或者使用 IDE (eclipse) 对你有用吗?
我在看一个命令行。我认为 junit eclipse 插件将允许您执行此操作。
我是为 Maven 1 做的。我记得,它涉及对负责内省测试类的 JUnit 进行更改。

Y
Yan Khonski

要在 Maven 中运行单个测试方法,您需要提供以下命令:

mvn test -Dtest=TestCircle#xyz test

其中 TestCircle 是测试类名称,xyz 是测试方法。

通配符也可以使用;在方法名和类名中。

如果您在多模块项目中进行测试,请使用 -pl <module-name> 指定测试所在的模块。

对于集成测试,请使用 it.test=... 选项而不是 test=...

mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test

通过降级到 surefire 2.9 修复了“未执行任何测试”错误
我修复了“未执行任何测试!”通过升级到 2.14:
如果您在多模块项目中进行测试,您还需要使用 -pl <module-name> 指定测试所在的模块。
使用 -DfailIfNoTests=false 跳过未经测试的项目。 No Tests Were Executed 当您尝试从根项目运行测试并且有模块根本没有测试时发生。
该命令有效! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test 请注意,“-DTest”以大写“T”开头。
Y
Yassin Hajaj

Surefire 2.12 存在问题。这就是我将 maven-surefire-plugin 从 2.12 更改为 2.11 时发生的事情:

mvn test -Dtest=DesignRulesTest 结果:[错误] 无法在项目 pmd 上执行目标 org.apache.maven.plugins:maven-surefire-plugin:2.12:test (default-test):未执行任何测试! mvn test -Dtest=DesignRulesTest 结果:[INFO] --- maven-surefire-plugin:2.11:test (default-test) @ pmd --- ... 运行 net.sourceforge.pmd.lang.java.rule.design .DesignRulesTest 测试运行:5,失败:0,错误:0,跳过:4,经过时间:4.009 秒


在 2.12.1 或更高版本中再次工作。
修复了“未执行任何测试!”通过升级到 2.14
如果您使用 @Category(IntegrationTest.class),请使用 -Dit.test=ClassName,否则即使使用最新的插件版本,您也会得到 No tests were executed!
t
tunaranch

我用我的 TestNG 做什么,(对不起,JUnit 不支持这个)测试用例是我可以为我想运行的测试分配一个组

@Test(groups="broken")

然后只需运行'mvn -Dgroups=broken'。


这是一个很好的答案。在我的例子中,测试试图运行,但一些 Seam 组件没有正确设置,所以看起来这也跳过了设置代码的某些部分。
正确的。您需要将 groups=broken 放入您的 @BeforeMethod 中,或者执行 @BeforeMethod(alwaysRun=true)
请让我知道这里的组是什么,因为我遇到了编译问题。
H
Hugo Dozois

在单个测试类中运行一组方法 使用 2.7.3 版,您只能在单个测试类中运行 n 个测试。

注意:junit 4.x 和 TestNG 支持它。

您必须使用以下语法

mvn -Dtest=TestCircle#mytest test

你也可以使用模式

mvn -Dtest=TestCircle#test* test

从 surefire 2.12.1 开始,您可以选择多个方法(此时仅限 JUnit4X,欢迎使用补丁)

mvn -Dtest=TestCircle#testOne+testTwo test

检查此link about single tests


在我的情况下,我不得不双引号 TestClass#test 名称,如 mvn -Dtest="TestCircle#myTest" test
@PratikKhadloya 知道它如何用于依赖测试吗?比如说,我在 TestClass 中有 test1()、test2()、test3() 方法,而 test2 依赖于 test1。我怎样才能只运行 test2()?
我认为如果您的测试之间存在依赖关系,那么您做错了什么。每个测试都应该独立于其他测试。您需要消除它们之间的耦合。
N
Nazmul Hoque Shafin

您可以使用以下语法运行特定的测试类和方法:

完整包:mvn test -Dtest="com.oracle.tests.**" 类中的所有方法:mvn test -Dtest=CLASS_NAME1 单个类中的单个方法:mvn test -Dtest=CLASS_NAME1#METHOD_NAME1 多个类中的多个方法: mvn test -Dtest=CLASS_NAME1#METHOD_NAME1,CLASS_NAME2#METHOD_NAME2


v
vikas

该命令有效! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test 请注意,“-DTest”以大写“T”开头。


不适用于 SureFire 2.18.x;它只是运行所有测试。
在使用 Java17 时,这对我产生了影响
A
Amit

从测试类运行单个测试方法。

mvn test -Dtest=Test1#methodname

其他相关用例

mvn test // 运行所有的单元测试类

mvn test -Dtest=Test1 // 运行单个测试类

mvn test -Dtest=Test1,Test2 //运行多个测试类

mvn test -Dtest=Test1#testFoo* // 从测试类运行匹配模式 'testFoo*' 的所有测试方法。

mvn test -Dtest=Test1#testFoo*+testBar* // 运行测试类中匹配模式 'testFoo*' 和 'testBar*' 的所有测试方法。


极好的解决方案
j
jwpol

我尝试了该线程中提供的几种解决方案,但是它们不适用于依赖于不同模块的模块。在这种情况下,我必须使用附加参数从根模块运行 mvn-am (--also-make),它告诉 maven 构建您的测试模块所依赖的模块和 -DfailIfNoTests=false,否则“没有测试处决!”出现错误。

mvn test -pl B -Dtest=MyTestClass#myTest -am -DfailIfNoTests=false

根中的 pom.xml 部分:

<modules>
    <module>A</module>
    <module>B</module>
<modules>

B依赖于A。


W
Wesley Hartford

tobrien 提到的 test 参数允许您在方法名称前使用 # 指定方法。这应该适用于 JUnit 和 TestNG。我从未尝试过,只是在 Surefire Plugin page 上阅读它:

指定此参数以按文件名运行单个测试,覆盖包含/排除参数。您在此处指定的每个模式都将用于创建格式为 **/${test}.java 的包含模式,因此您只需键入“-Dtest=MyTest”即可运行名为“foo/MyTest.java”的单个测试。此参数覆盖包含/排除参数和 TestNG suiteXmlFiles 参数。从 2.7.3 开始,您可以通过添加#myMethod 或#my*ethod 在测试中执行有限数量的方法。 junit 4.x 和 testNg 支持 Si 类型“-Dtest=MyTest#myMethod”


A
Andriy Plokhotnyuk

新版本的 JUnit 包含 Categories 运行器:http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html

但是 JUnit 的发布过程不是基于 maven 的,所以 maven 用户必须手动将它放到他们的存储库中。


好的。但我不明白这如何回答这个问题。
2.7.3 版本的 maven-surefire-plugin 支持 Subj:maven.apache.org/plugins/maven-surefire-plugin/examples/…
b
bsk

从 surefire 插件版本 2.22.1(可能更早)开始,您可以在使用 testng.xml 时使用 testnames 属性运行单个测试

给定以下 testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <test name="all-tests">
        <classes>
            <class name="server.Atest"/>
            <class name="server.Btest"/>
            <class name="server.Ctest"/>
        </classes>
    </test>
    <test name="run-A-test">
        <classes>
            <class name="server.Atest"/>
        </classes>
    </test>
    <test name="run-B-test">
        <classes>
            <class name="server.Btest"/>
        </classes>
    </test>
    <test name="run-C-test">
        <classes>
            <class name="server.Ctest"/>
        </classes>
    </test>
</suite> 

使用 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    [...]
    <properties>
        <selectedTests>all-tests</selectedTests>
    </properties>
    [...]
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.1</version>
            <configuration>
                <suiteXmlFiles>
                    <file>src/test/resources/testng.xml</file>
                </suiteXmlFiles>
                <properties>
                    <property>
                        <name>testnames</name>
                        <value>${selectedTests}</value>
                    </property>
                </properties>
            </configuration>
        </plugin>
    </plugins>
    [...]
</project>

从命令行

mvn clean test -DselectedTests=run-B-test

进一步阅读 - Maven surefire plugin using testng


d
deirdreamuel

首先你需要清理你的 maven 项目

mvn clean

然后您可以使用运行特定文件和功能

mvn test -Dtest=testClassName#testCaseName


S
Sorter

您需要指定要执行的 JUnit 测试类及其方法。

mvn test -Dtest=com.mycompany.AppTest#testMethod

https://metamug.com/article/java/build-run-java-maven-project-command-line.html#running-unit-tests


o
om-nom-nom

您可以运行单个测试类,但不能运行测试类中的单个方法。您使用类的简单名称而不是类的完全限定名称。因此,如果您在“org.sonatype.test.MyTest”中有一个测试,并且这是您想要运行的唯一测试,您的命令行将如下所示:

mvn test -Dtest=MyTest

我在单个模块项目中测试了先前评论中描述的解决方案,因此该评论所说的不是真的。
2009 年最初回答时可能是这样。