即使testng类中的方法抛出异常,ITestResult也会返回成功状态

时间:2018-12-27 07:03:42

标签: testng

我已经添加了testListener类和测试代码,但是即使testNG类中的调用方法发生异常,ITestResult状态也显示为Success并进入onTestSuccess(ITestResult tr)方法。

testNG类

    @Test  (invocationCount=1)
    public void offersPageRefresh() 
    {
       //Some steps
       cart.selectAndVerifyOffersBanner();
    }

购物车页面类

public void selectAndVerifyOffersBanner()
{
    try {
            //Some steps.
            moveToElement(selectOffersButton_MobileSite,driver);
            ExtentTestManager.getTest().log(LogStatus.PASS, "Offers banner selected and verified successfully.");
            } catch (WebDriverException | InterruptedException e) {
            ExtentTestManager.getTest().log(LogStatus.FAIL, "Offers banner selection and verification Failed.");
            e.printStackTrace();
        }
    }

现在,如果不存在selectOffersButton_MobileSite元素,它将抛出NoSuchElementException并进入catch块,并且记录器将正确打印故障消息。但是在完成offersPageRefresh()时,ITestResult返回成功状态,然后转到onTestSuccess(ITestResult tr),并将测试状态显示为“通过”。

为了解决此特定情况,需要进行哪些更改。请提出建议并先谢谢。

2 个答案:

答案 0 :(得分:0)

selectAndVerifyOffersBanner(),您可以使用try/catch处理异常,因此现在没有异常,您可以测试显示为合格。

catch中,完成日志记录后,抛出与处理类似的异常

 throw e;

throw new Exception(e.getMessage()); //it create a new Exception object and throw it

然后测试将失败。

答案 1 :(得分:0)

ITestResult根据处理方式给出@Test的结果。

如果@Test已被try/catch块处理,则意味着我们允许继续执行测试。并且如果引发异常,则由catch块处理。因此,由于@Test的处理,此处try/catch的故障未显示出来。

如果要通过ITestResult跟踪异常,则需要避免进行try/catch处理。

Reference example