为什么在TestNG中这个测试的执行顺序是这样的?

Why is the order of execution of this test like this in TestNG?

代码如下:

public class Class2 {

    @Test()
    public void a() {
        System.out.println("a");    
    }
    @Test(dependsOnMethods= {"d"})
    public void b() {
        System.out.println("b");    
    }
    @Test
    public void c() {
        System.out.println("c");    
    }
    @Test
    public void d() {
        System.out.println("d");    
    }
    @Test
    public void e() {
        System.out.println("e");    
    }
}

输出是:

c
d
e
a
b

a) 为什么执行顺序是这样的? b) 为什么 a() 在 e() 之后执行,即使我没有为它指定任何 dependsOn 参数?

理想情况下会按照a,c,d,b,e的顺序执行。有人可以解释一下这背后的逻辑吗?

与 JUnit 相同,TestNG 在其默认执行中遵循几乎随机的顺序执行(至少不可预测),使每个测试彼此独立。

TestNG 引入了测试依赖关系和测试优先级(第二个也在 JUnit5 中引入)。有了这个,您可以设置自己的订单。

Dependencies 将确保在该方法之前没有依赖于另一个 运行s 的方法(即它将确保 'b' 运行s在 'd') 之前,仅此而已。其余的将遵循我上面描述的相同概念。

Priorities 会给你的测试一个几乎实际的顺序,指定你想先 运行 哪个。为什么 'almost'?因为如果测试 B 的优先级为 1 而测试 D 的优先级为 2,D 仍将 运行 首先,因为 B 对它有依赖性,否则将失败。

我希望这能回答你的问题。

TestNG - 'dependsOnMethods' 执行将像不依赖于其他方法的@Test 方法一样首先执行。 然后最后执行依赖于其他方法的@Test方法。

package com.test.testngexp;

import org.testng.annotations.Test;

public class TestNGTest50 
{
    @Test()
    public void a() {
        System.out.println("a");
    }

    @Test(dependsOnMethods = { "d" })
    public void b() {
        System.out.println("b");
    }

    @Test
    public void c() {
        System.out.println("c");
    }

    @Test
    public void d() {
        System.out.println("d");
    }

    @Test
    public void e() {
        System.out.println("e");
    }
}


OUTPUT:
-------
[RemoteTestNG] detected TestNG version 7.0.0

c
d
e
a
b

TestNG - @Test 依赖项仅适用于属于相同 class 或任何继承的 classes 但不适用于不同 classes 的其他测试。