当前位置: 首页 > 面试题库 >

TestNG中的BeforeClass和BeforeTest之间的区别

荣轶
2023-03-14
问题内容

我们从TestNG官方文档中知道:

@BeforeClass: 带注释的方法将在调用当前类中的第一个测试方法之前运行。

@BeforeTest:带注释的方法将在运行属于<test>标签内部的类的任何测试方法之前运行。

上面的两个TestNG批注在功能上看起来都很相似。谁能解释这个独特的区别?


问题答案:

SeleniumAbstractTest.class

public abstract class SeleniumAbstractTest {

  @BeforeSuite
  public void beforeSuite() {
    System.out.println("BeforeSuite");
  }

  @BeforeTest
  public void beforeTest() {
    System.out.println("BeforeTest");
  }

  @BeforeClass
  public void beforeClass() {
    System.out.println("BeforeClass");
  }

  @BeforeMethod
  public void beforeMethod() {
    System.out.println("BeforeMethod");
  }

  @AfterMethod
  public void afterMethod() {
    System.out.println("AfterMethod");
  }

  @AfterClass
  public void afterClass() {
    System.out.println("AfterClass");
  }

  @AfterTest
  public void afterTest() {
    System.out.println("AfterTest");
  }

  @AfterSuite
  public void afterSuite() {
    System.out.println("AfterSuite");
  }

}

MyTestClass1.class

public class MyTestClass1 extends SeleniumAbstractTest {

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

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

MyTestClass2.class

public class MyTestClass2 extends SeleniumAbstractTest {

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

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

如果您具有以下测试套件…

<suite name="Suite">
  <test name="Test1" >
    <classes>
       <class name="MyTestClass2" />
    </classes>
  </test>

  <test name="Test2">
    <classes>
      <class name="MyTestClass1"/>
      <class name="MyTestClass2"/>
    </classes>
  </test>
</suite>

…那么输出[缩进以便于阅读]将是

BeforeSuite
'   BeforeTest
'   '   BeforeClass
'   '   '   BeforeMethod
'   '   '   '   myTestMethod3
'   '   '   AfterMethod
'   '   '   BeforeMethod
'   '   '   '   myTestMethod4
'   '   '   AfterMethod
'   '   AfterClass
'   AfterTest
'   BeforeTest
'   '   BeforeClass
'   '   '   BeforeMethod
'   '   '   '   myTestMethod1
'   '   '   AfterMethod
'   '   '   BeforeMethod
'   '   '   '   myTestMethod2
'   '   '   AfterMethod
'   '   AfterClass
'   '   BeforeClass
'   '   '   BeforeMethod
'   '   '   '   myTestMethod3
'   '   '   AfterMethod
'   '   '   BeforeMethod
'   '   '   '   myTestMethod4
'   '   '   AfterMethod
'   '   AfterClass
'   AfterTest
AfterSuite

希望能帮助到你 :)



 类似资料:
  • 我们从官方的TestNG文档中了解到: 在调用当前类中的第一个测试方法之前,将运行带注释的方法。 将在运行属于标记中的类的任何测试方法之前运行带注释的方法。

  • 问题内容: 之间的主要区别是什么 和 和JUnit中5 @BeforeEach和@BeforeAll 和 根据JUnit ,在以下情况下使用Api: 编写测试时,通常会发现几个测试需要先创建类似的对象,然后才能运行。 而可以用来建立数据库连接。但是不能一样吗? 问题答案: 标记的代码在每次测试之前执行,而在整个测试夹具之前运行一次。如果你的测试类有十个测试,则代码将执行十次,但仅执行一次。 通常,

  • 我仍在学习自动化测试,并且一直在研究一些测试框架。我发现有两种方法可以帮助人们启动WebDriver。 有些人在BeforeClass中启动它(使用TestNG),它使驱动程序在整个类测试中保持活动状态,包括许多测试用例 其他组在每个测试用例@test或@BeforeTest中启动WebDriver,以便它们可以为每个类创建新的WebDriver 我们需要在哪里启动WebDriver?非常感谢。

  • 这两个注释都用于表示带注释的方法应该在当前测试类中的每个测试方法之前执行。 那么为什么我们要将注释从@BeforeClass-junit4更改为@beforecreach-Junit 5呢? JUnit5中添加了什么我没有的东西? 其他注释的情况类似。

  • 之间的主要区别是什么 和 根据JUnit Api用于以下情况: 编写测试时,通常会发现一些测试在运行之前需要创建类似的对象。 而可用于建立数据库连接。但是以前的

  • 我正在尝试使用testng.xml执行testcases。我已经将所有的测试运行类放在一个测试中。在执行时,我注意到第二类(仪表板类)的@beforeTest方法首先执行。我希望执行所有类的@beforeTest方法,以与testng.xml文件中的类相同的执行顺序执行。请看下面的图片。 对于我在提到的类中使用的所有@beforeTest和@beforeClass我都使用了waysrun=true