我们如何从TestNG

时间:2018-04-11 07:47:48

标签: unit-testing selenium testing automation testng

在TestNG中Assert.fail("some message");之后,我收到的失败消息如下:

java.lang.AssertionError: some message
    at org.testng.test.BasicTest.test(BasicTest.java:11)
... Removed 31 stack frames

但我只想要失败的消息,如:

some message

这意味着,我想删除堆栈跟踪信息:

java.lang.AssertionError:

at org.testng.test.BasicTest.test(BasicTest.java:11)
    ... Removed 31 stack frames

在这里,我写了一个监听器来控制方法执行,改变了失败消息:

public class ErrorMessageListener implements IInvokedMethodListener {
    private static Logger logger = Logger.getLogger(ErrorMessageListener.class);
    @Override
    public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {}
    @Override
    public void afterInvocation(IInvokedMethod method, ITestResult result) {
        logger.info("Invoked afterInvocation(IInvokedMethod, ITestResult)");
        if (method.isTestMethod() && ITestResult.FAILURE == result.getStatus()) {
            Throwable throwable = result.getThrowable();
            String originalMessage = throwable.getMessage();
            logger.info("Original : " + originalMessage);
            String modifiedMessage = originalMessage.replace("java.lang.AssertionError:", "").trim();
            logger.info("Modified : " + modifiedMessage);
            try {
                FieldUtils.writeField(throwable, "detailMessage", modifiedMessage, false);
            } catch (Exception cause) {
                cause.printStackTrace();
            }
        }
    }
}

并将其添加到测试类:

@Listeners(ErrorMessageListener.class)
public class BasicTest {
    @Test
    public void test(){
         Assert.fail("some message");
     }
}

但我仍然得到同样的失败信息:

java.lang.AssertionError: some message
        at org.testng.test.BasicTest.test(BasicTest.java:11)
    ... Removed 31 stack frames

2 个答案:

答案 0 :(得分:0)

ITestListener#onTestFailure这就是你所需要的。

您将获得ITestResultgetThrowable()的{​​{1}}个实例 - 您可以通过任何方式修改它们。

答案 1 :(得分:-1)

您可能需要考虑使用if语句来测试您的情况。如果结果是假的,只需打印出你的消息

if("your condition"){

}else{
    System.out.println("some message");
    throw "applicable exception";
}