目录
我们可以在一个类中使用多个@BeforeSuite注释方法吗?
TestNG是Java生态系统中许多人使用的流行测试框架。它提供了各种注释,帮助规范测试执行。最重要的注释之一是@BeforeSuite
注释。
本文将讨论@BeforeSuite注释及其在TestNG中的用法。我们将介绍以下主题:
什么是@BeforeSuite注解?
@BeforeSuite注释是TestNG中所有@BeforeXXX和@AfterXXX注释中的最高优先级。这意味着任何带有@BeforeSuite注释的方法都将在套件中的任何其他测试之前执行。
@BeforeSuite带注释的方法何时执行?
通过参考testng.xml文件,可以很容易地理解@BeforeXXX和@AfterXXX注释的执行点。
<!-- @BeforeSuite annoated method will execute here -->
<suite name="codekru">
<test name="codekru">
<classes>
<class name="Test.CodekruTestFirst" />
<class name="Test.CodekruTestSecond" />
</classes>
</test>
</suite>
因此,@BeforeSuite注释方法将在suite标记之前执行。
我们将采用两个类(CodekruTestOne和CodekruTestSecond),并在CodekruTestSecond类中定义@BeforeSuite注释方法。
CodekruTestFirst.java
package Test;
import org.testng.Assert;
import org.testng.annotations.Test;
public class CodekruTestFirst {
@Test
public void test() {
System.out.println("Executing the test in CodekruTestFirst class");
Assert.assertTrue(true);
}
}
CodekruTestSecond.java
package Test;
import org.testng.Assert;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
public class CodekruTestSecond {
@BeforeSuite
public void beforeSuite() {
System.out.println("In beforeSuite method");
}
@Test
public void test() {
System.out.println("Executing the test in CodekruTestSecond class");
Assert.assertTrue(true);
}
}
我们现在将运行下面的XML来执行这两个类,让我们看看会发生什么。
<suite name="codekru">
<test name="codekru">
<classes>
<class name="Test.CodekruTestFirst" />
<class name="Test.CodekruTestSecond" />
</classes>
</test>
</suite>
输出-
In beforeSuite method
Executing the test in CodekruTestFirst class
Executing the test in CodekruTestSecond class
===============================================
codekru
Total tests run: 2, Failures: 0, Skips: 0
@BeforeSuite annotation有什么用?
- 它允许您为套件中的所有测试执行常见的设置任务,例如初始化数据或设置环境。
- 它允许您在单个方法中定义常见的设置任务,从而减少了代码重复。
- 它通过将常见的设置任务与实际的测试代码分开来提高测试代码的可读性。
所以,是时候集思广益了
我们可以在一个类中使用多个@BeforeSuite注释方法吗?
答案是肯定的。我们可以在一个类中使用多个@BeforeSuite注释方法,并且所有方法都将在套件中的测试用例之前运行。我们将在CodekruTestSecond类中保留两个@BeforeSuite注释方法。我们来做个示范。
package Test;
import org.testng.Assert;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
public class CodekruTestSecond {
@BeforeSuite
public void beforeSuite1() {
System.out.println("In beforeSuite1 method");
}
@BeforeSuite
public void beforeSuite2() {
System.out.println("In beforeSuite2 method");
}
@Test
public void test() {
System.out.println("Executing the test in CodekruTestSecond class");
Assert.assertTrue(true);
}
}
然后运行下面的XML文件
<!-- @BeforeSuite annoated method will execute here -->
<suite name="codekru">
<test name="codekruTest">
<classes>
<class name="Test.CodekruTestSecond" />
</classes>
</test>
</suite>
输出-
In beforeSuite1 method
In beforeSuite2 method
Executing the test in CodekruTestSecond class
===============================================
codekru
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
===============================================
@BeforeSuite放在超类上时如何工作?
让我们通过一个例子来看看这个问题。
package Test;
import org.testng.Assert;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
class CodekruTest {
@BeforeSuite
public void beforeSuiteMethod() {
System.out.println("beforeSuite method called");
}
}
public class CodekruTestSubclass extends CodekruTest {
@Test()
public void test() {
System.out.println("Executing the subclass test");
Assert.assertTrue(true);
}
}
现在,我们将在testng.xml下面运行,看看会发生什么
<suite name="codekru">
<test name="codekru">
<classes>
<class name="Test.CodekruTestSubclass" />
</classes>
</test>
</suite>
输出-
beforeSuite method called
Executing the subclass test
===============================================
codekru
Total tests run: 1, Failures: 0, Skips: 0
===============================================
因此,即使带注释的方法放在超类上,beforeSuiteMethod也会运行,因为子类继承了所有方法。但是,如果我们将beforeSuiteMethod设置为private,它将不会运行,因为private方法不能被子类继承。
原文地址:https://blog.csdn.net/TalorSwfit20111208/article/details/135758238
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_60372.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!