在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

最佳答案

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

在那里,您将获得带有ITestResultgetThrowable()setThrowable()实例-您可以按自己喜欢的任何方式对其进行修改。

关于unit-testing - 我们如何从TestNG中的失败消息中删除java.lang.AssertionError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49769359/

10-10 00:18