
3.3 设计自动化测试用例
3.3.1 基于JUnit设计自动化测试用例
JUnit作为Java单元测试中的首选框架,在Java开发中使用最为广泛。目前JUnit的最新版本为JUnit 5,本节内容使用JUnit 5作为示例。
1.配置JUnit依赖
在pom.xml文件的<name>标签后输入以下粗体部分内容:

保存pom.xml文件,这时Maven会自动下载JUnit及其依赖的其他jar包。
2.编写自动化测试用例
在src/test/java的com.lujiatao.unittest Package中创建名为CalculatorForPpiTest的Class,在CalculatorForPpiTest中输入以下内容:


保存代码,在CalculatorForPpiTest.java上用鼠标右击,从弹出的快捷菜单中选择“Run As → JUnit Test”选项,运行结果如图3-1所示。

图3-1
下面对运行结果进行说明。
①init方法是被@BeforeAll修饰的,因此是整个Class的初始化操作(前置操作)。
②JUnit使用@Test注解修饰一个测试用例。
③自动化测试的精髓在于可以自动判断用例执行结果,在单元测试中这个过程叫作断言。assertEquals是JUnit中众多断言方法之一,该方法的第一个参数为预期结果,第二个参数为实际结果。
④从JUnit的运行结果可以看出7条测试用例都执行通过了,符合预期。
3.3.2 基于TestNG设计自动化测试用例
首先配置TestNG依赖,然后在工程(unittest)上用鼠标右击,从弹出的快捷菜单中选择“TestNG → Convert to TestNG”选项,在工程中生成testng.xml文件。
1.TestNG断言
TestNG的断言方法有很多,常用的如下。

判断两个字符串是否相等,如果带第三个参数,那么当断言失败时将显示失败信息,信息的内容即message。

判断两个布尔变量值是否相等,如果带第三个参数,那么当断言失败时将显示失败信息,信息的内容即message。

判断两个整型变量值是否相等,如果带第三个参数,那么当在断言失败时将显示失败信息,信息的内容即message。

判断两个双精度浮点型变量值是否相等,第三个参数为精度,如果写0.0,则代表精确到小数点后一位。如果带第四个参数,那么当断言失败时将显示失败信息,信息的内容即message。
以上断言方法均有对应的“反向”断言方法,即assertNotEquals,下面举例说明。
删除CalculatorForPpiTest中的内容,输入以下代码:

保存代码,在testng.xml上用鼠标右击,从弹出的快捷菜单中选择“Run As → TestNG Suite”选项,此时Eclipse的控制台输出如下:

从输出结果可以看到,其中一个用例执行失败了,因为testCase1断言两个字符串相等,但实际上两个字符串并不相等,所以断言失败。
当断言失败时,在测试报告中可以看到失败信息,如图3-2所示。

图3-2
2.编写自动化测试用例
下面使用TestNG代替JUnit编写测试用例,代码如下所示:


保存代码,在testng.xml上用鼠标右击,从弹出的快捷菜单中选择“Run As → TestNG Suite”选项,然后查看测试报告,如图3-3所示。

图3-3
可以看到与JUnit运行结果一致。
在实际项目中,单元自动化测试用例通常是由开发人员编写的,在代码提交到SVN或Git后,会触发CI工具(比如Jenkins)自动执行单元测试用例,并反馈执行结果。