學習使用TestNG中的斷言(Assertion) (1) ——Assertion概述與assertEquals方法簡介


在執行自動化測試用例的時候,我們需要自動判斷用例執行完成后獲得的輸出值是否與預期值一致,這個時候就需要用到斷言功能。

 

TestNG中提供了一個Assert類:org.testng.Assert,該類繼承了:java.lang.Object類。從TesNG的官方文檔中,我們可以看到,org.testng.Assert類是作為放置一系列斷言的靜態方法的容器。這些斷言方法基本上是有2個或三個輸入參數,參數的順序是 actualValue(實際值), expectedValue(期望值) [, message(信息)].

 

在實際的測試工作中我們經常用到的斷言方法有:assertEquals方法。該方法可以判斷 actualValue(實際值)與expectedValue(期望值)是否一致,如果兩者不一致,則會拋出 java.lang.AssertionError錯誤,打印出message(如果參數中有message的話),並跳出這個測試方法。我們可以通過一段簡單的代碼來看看這種情況。代碼如下:

 1 import org.testng.Assert;
 2 import org.testng.annotations.Test;
 3 
 4 public class TestAssertion {
 5 
 6     @Test
 7     public void testAssertEquals(){
 8         System.out.println("before test");
 9         Assert.assertEquals(1,2,"Not equals: ");
10         System.out.println("after test");
11     }
12 }

運行結果如下:

before test
FAILED: testAssertEquals
java.lang.AssertionError: Not equals:  expected [2] but found [1]
    at org.testng.Assert.fail(Assert.java:94)
    at org.testng.Assert.failNotEquals(Assert.java:494)
    at org.testng.Assert.assertEquals(Assert.java:123)
    at org.testng.Assert.assertEquals(Assert.java:370)
    at testNGtest.TestAssertion.testAssertEquals(TestAssertion.java:11)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
    at org.testng.TestNG.run(TestNG.java:1057)
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)


===============================================
    Default test
    Tests run: 1, Failures: 1, Skips: 0
===============================================

 

  可以看到,assertEquals之前的一段代碼 System.out.println("before test")被正常運行,控制台中打印出了 before test 的信息。當代碼運行到 Assert.assertEquals(1,2,"Not equals: ") 這一句時,拋出了java.lang.AssertionError錯誤,並打印了message中的內容。同時可以發現,Assert.assertEquals(1,2,"Not equals: ")后的代碼沒有被運行。這是因為在拋出java.lang.AssertionError錯誤時,就從該測試方法中跳出了。最后該測試方法也被認定執行失敗。

  testAssertEquals()方法的傳入參數類型除了JAVA的基礎數據類型之外,還可以傳入如byte數組byte[]、Collection對象、Object對象、Object對象數組等,這個在官網的API手冊中描述的很詳細。需要注意的是,在做數組、集合類的斷言時,只有實際值與期望值中元素內容相同,元素排列的順序也一致,才會斷言是相同的,否則會拋出錯誤。

extended by

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM