如何使用 TestNG 注解创建测试用例?
在 TestNG 中编写测试基本上涉及以下步骤:
编写测试的业务逻辑并在代码中插入 TestNG 注解。
在 testng.xml 文件或 build.xml 文件中添加有关测试的信息(例如,类名、要运行的组等)。
运行 TestNG。
在本文中,我们将看到一个完整的 TestNG 测试示例,使用 POJO 类、业务逻辑类和一个测试 xml,这些将由 TestNG 运行。
解决此问题的方法/算法
步骤 1:在 src 中创建EmployeeDetails.java,这是一个 POJO 类,如程序代码所示。
EmployeeDetails 类用于:
获取/设置员工姓名的值。
获取/设置员工月薪的值。
获取/设置员工年龄的值。
步骤 2:在 src 中创建一个EmpBusinessLogic.java,其中包含业务逻辑。
EmpBusinessLogic 类用于计算:
员工的年薪。
员工的加薪金额。
步骤 3:在 src 中创建一个名为TestEmployeeDetails.java的 TestNG 类。TestNG 类是一个 Java 类,其中包含至少一个 TestNG 注解。此类包含要测试的测试用例。TestNG 测试也可以通过 @BeforeXXX 和 @AfterXXX 注解进行配置。
TestEmployeeDetails 类用于测试 EmpBusinessLogic 类的 方法。它执行以下操作:
测试员工的年薪。
测试员工的加薪金额。
步骤 4:现在,创建并运行 testNG.xml 或直接在 IDE 中运行 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 ===============================================