一、TestNG介绍
- TestNG是Java中的一个测试框架, 类似于JUnit 和 NUnit, 功能都差不多, 只是功能更加强大,使用也更方便。
- 官方链接:https://testng.org/doc/index.html
pom.xml
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.10</version>
<scope>test</scope>
</dependency>
二、常用的断言API
1、Assert.assertTrue();
- assertTrue()如果实际输出的结果是false,测试不通过,并停止执行。
Assert.assertTrue(condition,message);
2、Assert.assertFalse();
- assertFalse()如果实际输出的结果是true,测试不通过,并停止执行。
3、Assert.assertEquals(actual,expect,message)
- assertEquals()如果值不等,就会停止执行,测试不通过。会输出message
- 如果值相等就会继续执行。括号里的message不会打印
assertEquals()方法包含很多不同参数类型的重载方法。
其他:
关于assert常见断言方法及描述如下:
- assertTrue:判断是否为True。True就通过
- assertFalse:判断是否为false。false就通过
- assertSame:判断引用地址是否相同。
- assertNotSame:判断引用地址是否不相同。
- assertNull:判断是否为null。
- assertNotNull:判断是否不为null。
- assertEquals:判断是否相等,Object类型的对象需要实现haseCode及equals方法。
- assertNotEquals:判断是否不相等。
- assertEqualsNoOrder:判断忽略顺序是否相等
三、案例:
1.被测试类的编写
public class ClassToBeTested {
public int add(int a, int b){
return a+b;
}
public String addString(String a, String b){
return a+" "+b;
}
public int[] getArray(){
int[] arrayExample = {1, 2, 3, 4};
return arrayExample;
}
}
2、测试类测试方法脚本的编写;
public class TestAssert {
@Test
public void testIntAdd(){
System.out.println("测试两个int类的和是否正确");
ClassToBeTested test = new ClassToBeTested();
int result = test.add(2, 4);
Assert.assertEquals(result, 6);
}
@Test
public void testStringAdd(){
System.out.println("测试字符串的连接与期望的字符串是否一致");
String expectedString = "Hello World";
ClassToBeTested test = new ClassToBeTested();
String result = test.addString("Hello", "World");
Assert.assertEquals(result, expectedString);
}
@Test
public void testArray(){
System.out.println("比较两个数组是否相等");
int[] expectedArray = {1, 2, 3, 4};
ClassToBeTested test = new ClassToBeTested();
int[] result = test.getArray();
Assert.assertEquals(result, expectedArray);
System.out.println("这是比较两个数组是否成功断言后的输出语句");
}
}
可以看到上述的执行过程是按照方法名首字母顺序执行。
修改测试类TestAssert.java中的testArray()方法
@Test
public void testArray(){
System.out.println("比较两个数组是否相等");
int[] expectedArray = {1, 2, 3};
ClassToBeTested test = new ClassToBeTested();
int[] result = test.getArray();
Assert.assertEquals(result, expectedArray);
System.out.println("这是比较两个数组是否成功断言后的输出语句");
}
- 上述代码中,int[] expectedArray = {1, 2, 3, 4}; 修改为 int[] expectedArray = {1, 2, 3};,
- 可以得知 Assert.assertEquals(result, expectedArray);断言失败。
结论:
- TestNG执行失败了,该失败的测试方法中后面的语句将会停止执行,
- 但是其他的测试方法不受影响,可以继续执行。
default suits
- temp-testng-customsuite.xml
四、软断言
- 在TestNg中,SoftAssert类为软断言,特点是如果运行断言失败,不会停止运行,会继续执行这个断言下的其他语句或者断言,不影响其他断言的运行。
- 使用说明:assertAll()一定要放在该测试类的最后一个断言后面,软断言的类,叫SoftAssert.java,这个类是需要创建实例对象,才能调用相关实例方法进行软断言。
举例如下:
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;
public class TestSoftAssert {
@Test
public void testSoftAssert(){
System.out.println("脚本执行开始。。。。。。。。。。。。。。。。。。");
//实例化SoftAssert
SoftAssert assertion = new SoftAssert();
assertion.assertEquals(5, 6,"我俩不是一样大");
System.out.println("脚本执行结束。。。。。。。。。。。。。。。。。。");
System.out.println("我是观望,到这会不会执行的");
//这个必须放到最后,没什么可说的
assertion.assertAll();
}
}
运行上面的代码,结果如下: