📅  最后修改于: 2023-12-03 15:35:19.053000             🧑  作者: Mango
TestNG是一种Java测试框架,它结合了JUnit和NUnit的优点,拥有更强大和灵活的功能。TestNG采用基于注释的方法编写测试用例,可以让你更容易的编写和组织测试代码。本文将会介绍TestNG基本注释的用法以及示例。
@Test注释是TestNG中最常用的注释之一,用于标记测试方法。使用该注释可以告诉TestNG这个方法是一个测试方法,以便框架能够执行这个方法。例如:
@Test
public void testAdd() {
int result = Calculator.add(2, 3);
Assert.assertEquals(result, 5);
}
在上面的示例中,@Test注释标注的testAdd()方法是一个测试方法。该方法调用了Calculator.add()方法,并使用Assert.assertEquals()方法验证了结果是否正确。
@Test注释还具有一些属性,例如:
alwaysRun
:如果设置为true,则无论该测试方法的前置方法(例如@BeforeMethod)是否成功执行,该测试方法都将执行。dataProvider
:用于指定数据提供程序的名称,以便动态生成测试数据。expectedExceptions
:用于指定预期的异常类,如果方法抛出预期异常,则该方法将被视为通过。priority
:用于指定测试方法的执行顺序。dependsOn
:用于指定依赖的方法,例如@Test(dependsOnMethods = "testAdd")。@BeforeMethod和@AfterMethod注释分别在测试方法执行前和测试方法执行后执行。例如:
@BeforeMethod
public void beforeMethod() {
System.out.println("Before Method");
}
@Test
public void test() {
System.out.println("Test Method");
}
@AfterMethod
public void afterMethod() {
System.out.println("After Method");
}
上面的示例中,@BeforeMethod注释标记的方法beforeMethod()将在@Test注释标记的方法test()之前执行,@AfterMethod注释标记的方法afterMethod()将在测试方法完成后执行。执行结果如下:
Before Method
Test Method
After Method
@BeforeClass和@AfterClass注释分别在测试类中的所有测试方法执行前和执行后执行。它们用于执行一些全局设置和清理操作。例如:
@BeforeClass
public void beforeClass() {
System.out.println("Before Class");
}
@AfterClass
public void afterClass() {
System.out.println("After Class");
}
@Test
public void test1() {
System.out.println("Test Method 1");
}
@Test
public void test2() {
System.out.println("Test Method 2");
}
上面的示例中,@BeforeClass注释标记的方法beforeClass()将在测试类中所有的测试方法之前执行,@AfterClass注释标记的方法afterClass()将在测试类中所有的测试方法执行完成后执行。执行结果如下:
Before Class
Test Method 1
Test Method 2
After Class
@DataProvider注释用于提供测试数据。它可以从各种来源获取数据,例如Excel、CSV文件或数据库。使用该注释时,你需要编写一个方法来提供测试数据,并将该方法的名称作为@DataProvider注释的值。例如:
@DataProvider(name = "testData")
public static Object[][] testData() {
return new Object[][]{{"apple", 1}, {"orange", 2}, {"banana", 3}};
}
@Test(dataProvider = "testData")
public void test(String fruit, int count) {
System.out.println(fruit + " : " + count);
}
上面的示例中,@DataProvider注释标记的方法testData()提供了一个包含三行数据的Object数组,该数组将作为测试方法test()的参数。@Test注释通过属性dataProvider="testData"使用了该数据提供程序。
@Parameters注释用于在测试运行时动态提供测试数据。例如:
@Test
@Parameters({"fruit", "count"})
public void test(String fruit, int count) {
System.out.println(fruit + " : " + count);
}
上面的示例中,@Test注释使用了两个参数值(fruit和count),这些参数值以字符串数组的形式传递给该测试方法。在运行测试之前,你需要为这些参数值提供实际值,例如通过testng.xml文件。