TestNg之软硬断言

84 阅读1分钟

TestNg之软硬断言

场景,比如说我有一个测试方法,需要验证两个参数,一个校验失败了但是不能影响另一个,我们先来看一下平时我们使用的硬断言的结果

package com.newcrud.testngTest;
import org.testng.Assert;
import org.testng.annotations.Test;
public class TestFour  {
    @Test
    public void testA()  {
        System.out.println("1");
        Assert.assertEquals(1,1,"第一个判断");
        System.out.println("2");
        Assert.assertEquals(1,2,"第二个判断");
        System.out.println("3");
        Assert.assertEquals(1,1,"第三个判断");
    }
​
}

结果,执行结果为失败,且第二个判断失败之后,并未执行第三个,说明是被截断了

1
2
​
java.lang.AssertionError: 第二个判断 
Expected :2
Actual   :1
<Click to see difference>
​
​
  at org.testng.Assert.fail(Assert.java:94)
  at org.testng.Assert.failNotEquals(Assert.java:513)
  at org.testng.Assert.assertEqualsImpl(Assert.java:135)
  at org.testng.Assert.assertEquals(Assert.java:116)
  at org.testng.Assert.assertEquals(Assert.java:389)
  at com.newcrud.testngTest.TestFour.testA(TestFour.java:10)
  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:498)
  at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:104)
  at org.testng.internal.Invoker.invokeMethod(Invoker.java:645)
  at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:851)
  at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1177)
  at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
  at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
  at org.testng.TestRunner.privateRun(TestRunner.java:756)
  at org.testng.TestRunner.run(TestRunner.java:610)
  at org.testng.SuiteRunner.runTest(SuiteRunner.java:387)
  at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:382)
  at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
  at org.testng.SuiteRunner.run(SuiteRunner.java:289)
  at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
  at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
  at org.testng.TestNG.runSuitesSequentially(TestNG.java:1293)
  at org.testng.TestNG.runSuitesLocally(TestNG.java:1218)
  at org.testng.TestNG.runSuites(TestNG.java:1133)
  at org.testng.TestNG.run(TestNG.java:1104)
  at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
  at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)
​

那我们再来试一下软断言

package com.newcrud.testngTest;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;
​
public class TestFour  {
    @Test
    public void testA()  {
        SoftAssert softAssert=new SoftAssert();
        System.out.println("1");
        softAssert.assertEquals(1,1,"第一个判断");
        System.out.println("2");
        softAssert.assertEquals(1,2,"第二个判断");
        System.out.println("3");
        softAssert.assertEquals(1,1,"第三个判断");
        softAssert.assertAll();
        //最后一定要加上这个assertAll,要不然是不会执行的
    }
​
}

结果,测试结果为失败,但是第二个判断失败之后,还在继续执行了第三个判断,说明没有被截断。

1
2
3
​
java.lang.AssertionError: The following asserts failed:
  第二个判断 
Expected :2
Actual   :1
<Click to see difference>
​
​
  at org.testng.asserts.SoftAssert.assertAll(SoftAssert.java:43)
  at com.newcrud.testngTest.TestFour.testA(TestFour.java:16)
  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:498)
  at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:104)
  at org.testng.internal.Invoker.invokeMethod(Invoker.java:645)
  at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:851)
  at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1177)
  at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
  at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
  at org.testng.TestRunner.privateRun(TestRunner.java:756)
  at org.testng.TestRunner.run(TestRunner.java:610)
  at org.testng.SuiteRunner.runTest(SuiteRunner.java:387)
  at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:382)
  at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340)
  at org.testng.SuiteRunner.run(SuiteRunner.java:289)
  at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
  at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
  at org.testng.TestNG.runSuitesSequentially(TestNG.java:1293)
  at org.testng.TestNG.runSuitesLocally(TestNG.java:1218)
  at org.testng.TestNG.runSuites(TestNG.java:1133)
  at org.testng.TestNG.run(TestNG.java:1104)
  at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
  at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:109)
​
​
===============================================
Default Suite
Total tests run: 1, Failures: 1, Skips: 0
===============================================