TestNG expectedExceptions 处理:有我的蛋糕和吃它吗?

如何在TestNG中处理expectedExceptions,这样无论测试方法中的代码是否抛出异常,测试都是通过的


我有创建某些对象列表的 testng 测试方法。在每个对象的 for 循环中,都会执行特定的操作。此操作可能会或可能不会引发异常。如何使用@Test(expectedExceptions) 使得无论是否抛出异常,整体测试结果都是通过。根据我的理解,expectedExceptions 总是会寻找异常。如果发现异常,则由 Testng 处理,测试结果通过。如果未找到异常或抛出不同的异常,则测试失败


public class DemoException {

@Test(expectedExceptions = {ConnectException.class})

public void testException() throws ConnectException

  {

    //pseudo code......   

    //create a List<WebElement> myList

    int count = 0;

    for(WebElemet we: myList){

     we.connect(); //this may or may not throw exception

     we.getResponseMessage(); // further actions on we is needed

     we.disconnect();

     //above 3 are HttpURLConnection methods to be precise

     // Basically do - connect, getResponse, disconnect  


 System.out.println(count++); 

     // print count is needed - exception thrown or not thrown

  }

 }

}

预期:无论是否抛出异常,测试方法都应该通过。即使抛出异常也应该打印计数值


实际结果:测试方法通过(抛出异常)但不打印计数值。如果添加了任何 try-catch 逻辑,则打印计数值但测试方法失败。这不是我想要的。


撒科打诨
浏览 114回答 3
3回答

慕哥9229398

你为什么不试试这个:@Test(expectedExceptions = Exception.class)public void MyTest() throws Exception {&nbsp; &nbsp; int count = 0;&nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < 10; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throw new Exception("Fake Exception");&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; catch (Exception ex)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(count++);&nbsp; &nbsp; &nbsp; &nbsp; throw&nbsp; ex;&nbsp; &nbsp; }}将计数打印到日志/控制台,然后再次抛出异常。

守着星空守着你

尝试 SoftAssert。即使测试失败,它也会继续https://static.javadoc.io/org.testng/testng/6.13/org/testng/asserts/SoftAssert.html

Helenr

参考这篇文章后,我能够通过实现 IInvokedMethodListener 显式“修改”TestNG 的结果状态 - 覆盖 afterInvocation 方法。测试结果是通过。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java