TestNG中的类级注释

发布时间:2024年01月19日

目录

现在,如果我们在类级别使用带有@Test注释的属性会怎么样?这也会传播到类中的所有测试方法吗?

如果我们把@Test注释放在类级别和方法级别会怎么样?

但是现在,如果我们在类级别和方法级别上也有相同的属性会怎么样呢?到时候会发生什么?


您知道TestNG为我们提供了一个很棒的特性,它允许我们在类级别而不是方法级别定义注释吗?在这篇文章中,我们将详细讨论类级别的注释。

假设我们在一个类中有100个方法,在每个方法上编写@Test注释可能非常麻烦。相反,我们可以做的只是在类级别编写@Test注释,这将使类中存在的所有方法都成为测试方法,即使它们没有注释。

下面是我们的CodekruTest类,我们将在类级别使用@Test注释

package Test;
 
import org.testng.Assert;
import org.testng.annotations.Test;
 
@Test
public class CodekruTest {
 
    public void gammaMethod() {
        System.out.println("Executing gammaMethod in CodekruTest class");
        Assert.assertTrue(true);
    }
 
    public void alphaMethod() {
        System.out.println("Executing alphaMethod in CodekruTest class");
        Assert.assertTrue(true);
    }
 
    public void betaMethod() {
        System.out.println("Executing betaMethod in CodekruTest class");
        Assert.assertTrue(true);
    }
 
    public void deltaMethod() {
        System.out.println("Executing deltaMethod in CodekruTest class");
        Assert.assertTrue(true);
    }
 
}

下面是运行CodekruTest类的XML文件

<suite name="codekru">
    <test name="codekruTest">
        <classes>
            <class name="Test.CodekruTest">
            </class>
        </classes>
    </test>
</suite>

运行上述XML文件后的输出-

Executing alphaMethod in CodekruTest class
Executing betaMethod in CodekruTest class
Executing deltaMethod in CodekruTest class
Executing gammaMethod in CodekruTest class
现在,如果我们在类级别使用带有@Test注释的属性会怎么样?这也会传播到类中的所有测试方法吗?

让我们在将invocationCount属性与@Test注释一起使用时尝试执行此操作

package Test;
 
import org.testng.Assert;
import org.testng.annotations.Test;
 
@Test(invocationCount =  2)
public class CodekruTest {
 
    public void gammaMethod() {
        System.out.println("Executing gammaMethod in CodekruTest class");
        Assert.assertTrue(true);
    }
 
    public void alphaMethod() {
        System.out.println("Executing alphaMethod in CodekruTest class");
        Assert.assertTrue(true);
    }
 
    public void betaMethod() {
        System.out.println("Executing betaMethod in CodekruTest class");
        Assert.assertTrue(true);
    }
 
    public void deltaMethod() {
        System.out.println("Executing deltaMethod in CodekruTest class");
        Assert.assertTrue(true);
    }
 
}

再次运行相同的XML文件,下面将是输出-

Executing alphaMethod in CodekruTest class
Executing alphaMethod in CodekruTest class
Executing betaMethod in CodekruTest class
Executing betaMethod in CodekruTest class
Executing deltaMethod in CodekruTest class
Executing deltaMethod in CodekruTest class
Executing gammaMethod in CodekruTest class
Executing gammaMethod in CodekruTest class

在这里我们可以看到每个测试方法执行了两次。

如果我们把@Test注释放在类级别和方法级别会怎么样?

在这里,测试方法将同时具有类级别的注释属性和方法级别的注释属性,如下面的示例所示

package Test;
 
import org.testng.Assert;
import org.testng.annotations.Test;
 
@Test
public class CodekruTest {
 
    @Test(invocationCount =  2)
    public void gammaMethod() {
        System.out.println("Executing gammaMethod in CodekruTest class");
        Assert.assertTrue(true);
    }
 
    public void alphaMethod() {
        System.out.println("Executing alphaMethod in CodekruTest class");
        Assert.assertTrue(true);
    }
 
    public void betaMethod() {
        System.out.println("Executing betaMethod in CodekruTest class");
        Assert.assertTrue(true);
    }
 
    public void deltaMethod() {
        System.out.println("Executing deltaMethod in CodekruTest class");
        Assert.assertTrue(true);
    }
 
}

运行相同的XML文件后,

Executing alphaMethod in CodekruTest class
Executing betaMethod in CodekruTest class
Executing deltaMethod in CodekruTest class
Executing gammaMethod in CodekruTest class
Executing gammaMethod in CodekruTest class

在这里我们可以看到只有gammaMethod被执行了两次。

但是现在,如果我们在类级别和方法级别上也有相同的属性会怎么样呢?到时候会发生什么?

在这里,方法级别属性值将覆盖类级别属性值,如下面的示例所示

package Test;
 
import org.testng.Assert;
import org.testng.annotations.Test;
 
@Test(invocationCount = 2)
public class CodekruTest {
 
    @Test(invocationCount =  1)
    public void gammaMethod() {
        System.out.println("Executing gammaMethod in CodekruTest class");
        Assert.assertTrue(true);
    }
 
    public void alphaMethod() {
        System.out.println("Executing alphaMethod in CodekruTest class");
        Assert.assertTrue(true);
    }
 
    public void betaMethod() {
        System.out.println("Executing betaMethod in CodekruTest class");
        Assert.assertTrue(true);
    }
 
    public void deltaMethod() {
        System.out.println("Executing deltaMethod in CodekruTest class");
        Assert.assertTrue(true);
    }
 
}

运行相同的XML文件后的输出-

Executing alphaMethod in CodekruTest class
Executing alphaMethod in CodekruTest class
Executing betaMethod in CodekruTest class
Executing betaMethod in CodekruTest class
Executing deltaMethod in CodekruTest class
Executing deltaMethod in CodekruTest class
Executing gammaMethod in CodekruTest class

在这里我们可以看到,所有的测试方法都执行了两次,除了gammaMethod,它只执行了一次。

文章来源:https://blog.csdn.net/TalorSwfit20111208/article/details/135707402
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。