TestNG断言
- Assert类(硬断言)
1)TestNG中提供了多个33个assertEquals()方法,主要是匹配不同的数据类型和集合类操作。我们最常用的就是assertEquals(actual, expected)或者assertEquals(actual,expected,“message1”)
在com.course.testng包里新建AssertionTest类,代码如下
package com.course.testng;
import org.testng.Assert;
import org.testng.annotations.Test;
public class AssertionTest {
@Test
public void assertEquals1() {
System.out.println("1");
Assert.assertEquals("1","2"); //Assert.assertEquals(actual, expected),actual实际值和expected期望值比较
}
@Test
public void assertEquals2() {
System.out.println("11");
Assert.assertEquals("11","12","断言"); //Assert.assertEquals(actual,expected,“message1”)actual实际值和expected期望值比较,比较失败返回message1
}
}
测试结果断言失败,可以看出assertEquals(actual,expected,“message1”)中,如果现实结果和期待结果不相等,抛出断言异常并显示message1的内容。自动化测试一般喜欢带上这个message1,这样抛出错误,更能快速读懂错误的原因和错误的具体业务逻辑。
2)assertEqualsNoOrder((actual, expect)
判断两个对象是否相同,忽略排序位置。例如下面的两个字符串数组比较。
package com.course.testng;
import org.testng.Assert;
import org.testng.annotations.Test;
public class AssertionTest {
@Test
public void assertEquals3(){
String[] st1 = {"Amy","Tom","Jhon"};
String[] st2 = {"Jhon","Amy","Tom"};
Assert.assertEqualsNoOrder(st1, st2,"两个字符串数组不相同");
}
}
测试结果
3) assertFalse(布尔条件,“message1”)
这里来一个断言为假的方法,断言一个条件,如果返回是假,则测试通过,如果返回是真,抛出断言异常,打印message1的内容。
package com.course.testng;
import org.testng.Assert;
import org.testng.annotations.Test;
public class AssertionTest {
@Test
public void assertEquals4() {
String[] st3 = {"Amy","Tom","Jhon"};
String[] st4 = {"Jhon","Amy","Tom"};
Assert.assertFalse(st3==st4,"两个相等");
}
}
测试结果
4) assertNotEquals(actual, expect, “message1”)
提供“不相等”断言方法,也是有6个针对不同数据类型的不相等的断言方法。这里我们介绍两个对象的不相等举例,如果相等,输出message1的内容。
package com.course.testng;
import org.testng.Assert;
import org.testng.annotations.Test;
public class AssertionTest {
@Test
public void assertEquals5() {
String[] st5 = {"Amy","Tom","Jhon"};
String[] st6 = {"Amy","Tom","Jhon"};
Assert.assertNotEquals(st5,st6,"两者相等");
}
}
测试结果
5) assertNotNull(object, “message1”)
对象非空判断,断言对象不为空,否则,抛出异常,打印message1的内容。
package com.course.testng;
import org.testng.Assert;
import org.testng.annotations.Test;
public class AssertionTest {
@Test
public void assertEquals6() {
String[] st7 = {"Amy","Tom","Jhon"};
String[] st8 = {};
String[] st9 = null;
Assert.assertNotNull(st7,"st7对象为空");
Assert.assertNotNull(st8,"st8对象为空");
Assert.assertNotNull(st9,"st9对象为空");
}
}
测试结果
6) assertSame(actual, expect, “message”)
断言两个对象相同,这里相同和上面的Equals不同,Equals是值比较,而Same是内存地址比较。直接来看下面例子。
package com.course.testng;
import org.testng.Assert;
import org.testng.annotations.Test;
public class AssertionTest {
@Test
public void assertEquals7() {
String[] str10 = {"Amy","Tom","Jhon"};
String[] str11 = {"Jhon","Amy","Tom"};
String[] str12 = str10;
Assert.assertSame(str10, str12, "not same");
Assert.assertSame(str10, str11, "not same");
}
}
测试结果
7) assertNotSame(actual, expect, “message”)
同样的,也有断言两个对象内存地址不相同的断言方法。
package com.course.testng;
import org.testng.Assert;
import org.testng.annotations.Test;
public class AssertionTest {
@Test
public void assertEquals8() {
String[] str13 = {"Amy","Tom","Jhon"};
String[] str14 = {"Jhon","Amy","Tom"};
String[] str15 = str13;
Assert.assertNotSame(str13, str15, "same");
}
}
测试结果
8) assertTrue(条件表达式, “message1”)
提供了断言一个条件为真的方法,如果条件表达式为真,该断言运行通过,如果表达式为假,抛出异常,打印message1的消息。
package com.course.testng;
import org.testng.Assert;
import org.testng.annotations.Test;
public class AssertionTest {
@Test
public void assertEquals9() {
String[] str16 = {"Amy","Tom","Jhon"};
String[] str17 = {"Amy","Jhon","Tom"};
String[] str18 = str16;
Assert.assertTrue(str16==str17,"两者不相同");
}
}
测试结果
- SoftAssert(软断言)
在Assert.java这个类中,上面我们已经介绍了大部分的断言方法。这些断言方法都是叫硬断言。硬断言就是,如果运行到折行断言失败,即使该用例,后面还有其他代码行,也不会继续执行下去。有时候我们不希望这种情况出现,SoftAssert就很好地帮我们解决了这个问题。
SoftAssert的特点
1) 如果一个断言失败,会继续执行这个断言下的其他语句或者断言。
2) 也就是一个用例有多个断言,失败了其中一个,不影响其他断言的运行
3) 不要忘记调用assertAll()在该用例的最后一个断言后面。
package com.course.testng;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;
public class AssertionTest {
@Test
public void assertEquals10() {
System.out.println("Test start");
SoftAssert assertion = new SoftAssert();
assertion.assertEquals(12, 13, "两者不相等");
System.out.println("Test complete");
System.out.println(3+8);
assertion.assertAll();
}
}
测试结果
通过运行结果截图,我们可以看到在断言12和13相等的这行代码后面还有其他的语句,如果这里采用的是Hard Assert,那么Test complete 和 11是不会输出,也就是代码没有被执行。这个就是SoftAssert的优点,再强调一次,最后一定要调用assertAll()方法。