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

时间:2019-11-14 12:43:28

标签: 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)为什么即使我没有为其指定任何dependsOn参数,也要在e()之后执行a()?

理想地,它将按照a,c,d,b,e的顺序执行。有人可以解释其背后的逻辑吗?

3 个答案:

答案 0 :(得分:1)

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

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

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

Priorities将为您的测试给出ALMOST实际顺序,并指定您要先运行哪个。为什么“差不多”?原因是,如果测试B的优先级为1,而测试D的优先级为2,则D仍将首先运行,因为B对其具有依赖性,否则它将失败。

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

答案 1 :(得分:1)

TestNG - @Test 依赖项仅适用于属于同一类或任何一个继承类但不能跨越不同类的其他测试。

答案 2 :(得分:0)

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