TestNG 如何使用注解创建测试用例
在TestNG中编写测试基本上涉及以下步骤−
- 编写测试的业务逻辑并在代码中插入TestNG注解。
-
在testng.xml文件或build.xml文件中添加有关测试的信息(例如类名称,要运行的组等)。
-
运行TestNG。
在本文中,我们将使用POJO类,业务逻辑类和一个测试xml的TestNG测试来看一个完整的示例,该示例将由TestNG运行。
步骤
- 步骤1 :在src中创建 EmployeeDetails.java ,它是一个POJO类,如程序代码所示。
EmployeeDetails类用于−
- 获取/设置雇员姓名的值。
-
获取/设置雇员的月薪。
-
获取/设置雇员的年龄。
- 步骤2 :在src中创建 EmpBusinessLogic.java ,其中包含业务逻辑。
EmpBusinessLogic类用于计算−
- 员工的年薪。
-
员工的考核金额。
- 步骤3 :在src中创建一个名为 TestEmployeeDetails.java 的TestNG类。 TestNG类是包含至少一个TestNG注解的Java类。该类包含要测试的测试用例。 TestNG测试还可以通过@BeforeXXX和@AfterXXX注解进行配置。
TestEmployeeDetails类用于测试EmpBusinessLogic类的方法。它执行以下操作−
- 测试雇员的年薪。
-
测试雇员的考核金额。
- 步骤4 :现在,在IDE中创建和运行testNG.xml或直接testNG类,或者使用命令行编译和运行它。
在输出中,用户可以看到预期和实际的考核金额以及工资。
示例
以下是通用TestNG类的代码− EmployeeDetails:
src / EmployeeDetails.java
public class EmployeeDetails {
private String name;
private double monthlySalary;
private int age;
// @return the name
public String getName() {
return name;
}
// @param name the name to set
public void setName(String name) {
this.name = name;
}
// @return the monthlySalary
public double getMonthlySalary() {
return monthlySalary;
}
// @param monthlySalary the monthlySalary to set
public void setMonthlySalary(double monthlySalary) {
this.monthlySalary = monthlySalary;
}
// @return the age
public int getAge() {
return age;
}
// @param age the age to set
public void setAge(int age) {
this.age = age;
}
}
以下是通用 TestNG 类的代码 − EmpBusinessLogic:
src/EmpBusinessLogic.java
public class EmpBusinessLogic {
// Calculate the yearly salary of employee
public double calculateYearlySalary(EmployeeDetails employeeDetails) {
double yearlySalary = 0;
yearlySalary = employeeDetails.getMonthlySalary() * 12;
return yearlySalary;
}
// Calculate the appraisal amount of employee
public double calculateAppraisal(EmployeeDetails employeeDetails) {
double appraisal = 0;
if(employeeDetails.getMonthlySalary() < 10000) {
appraisal = 500;
} else {
appraisal = 1000;
}
return appraisal;
}
}
下面是常见的TestNG类的代码− TestEmployeeDetails:
src/TestEmployeeDetails.java
import org.testng.Assert;
import org.testng.annotations.Test;
public class TestEmployeeDetails {
EmpBusinessLogic empBusinessLogic = new EmpBusinessLogic();
EmployeeDetails employee = new EmployeeDetails();
@Test
public void testCalculateAppriasal() {
employee.setName("Rajeev");
employee.setAge(25);
employee.setMonthlySalary(8000);
double appraisal = empBusinessLogic.calculateAppraisal(employee);
Assert.assertEquals(500, appraisal, 0.0, "500");
System.out.println("Expected Appraisal:500;"+" Actual Appraisal:"+appraisal);
}
// Test to check yearly salary
@Test
public void testCalculateYearlySalary() {
employee.setName("Rajeev");
employee.setAge(25);
employee.setMonthlySalary(8000);
double salary = empBusinessLogic.calculateYearlySalary(employee);
Assert.assertEquals(96000, salary, 0.0, "8000");
System.out.println("Expected Salary:9600;"+" Actual Salary:"+salary);
}
}
testng.xml
这是一个用于组织和运行TestNG测试用例的配置文件。
当需要执行有限的测试而不是整个测试套件时,它非常方便。
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1" >
<test name = "test1">
<classes>
<class name = "TestEmployeeDetails"/>
</classes>
</test>
</suite>
输出
Expected Appraisal:500; Actual Appraisal:500.0
Expected Salary:9600; Actual Salary:96000.0
===============================================
Suite1
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================