轉自:https://cloud.tencent.com/developer/article/1479172
前言
在執行自動化測試腳本的時候,我們需要自動判斷測試腳本執行完成后的實際結果是否與預期結果一致,這個時候就需要在程序運行之前寫入斷言,判斷當前程序執行后是否正常。
關於TestNG斷言分為兩種:
- 軟斷言
- 硬斷言
硬斷言
在TestNg中,Assert類為硬斷言,里面有多個靜態方法被稱為硬斷言,特點就是,如果腳本運行斷言失敗,馬上停止運行,后面代碼將不會被執行。
TestNG中提供了多個assert*()方法,主要是匹配不同的數據類型和集合類及其他對象操作。
舉例如下:
import org.testng.Assert; import org.testng.annotations.Test; public class TestAssert { @Test public void testAssert() throws Exception { Assert.assertEquals(4, 2 * 2); Assert.assertEquals(5,1+9); } }
運行上面的代碼,結果如下:

從上面可以看出assertEquals中Expected和Actual不相等,如果實際結果和預期結果不相等,就會拋出斷言異常並顯示內容,這樣拋出的錯誤,更方便定位錯誤的原因和具體的業務邏輯。
關於assert常見斷言方法及描述如下:
- assertTrue:判斷是否為True。
- assertFalse:判斷是否為false。
- assertSame:判斷引用地址是否相同。
- assertNotSame:判斷引用地址是否不相同。
- assertNull:判斷是否為null。
- assertNotNull:判斷是否不為null。
- assertEquals:判斷是否相等,Object類型的對象需要實現haseCode及equals方法。
- assertNotEquals:判斷是否不相等。
- assertEqualsNoOrder:判斷忽略順序是否相等
軟斷言
在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(); } }
運行上面的代碼,結果如下:

通過運行結果發現,可以看到在斷言5和6相等的這行代碼后,,還有其他的語句,如果這里采用的是硬斷言,那么后面的"腳本執行結束"和"我是觀望,到這會不會執行的"是不會輸出的。也就是這兩條語句不會輸出。這個就是SoftAssert的優點,再強調一次,最后一定要調用assertAll()方法。