mercredi 11 avril 2018

How can we remove java.lang.AssertionError from failure message in TestNG

After Assert.fail("some message"); in TestNG, the failure message I am getting is like:

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

But I want failure message only, like :

some message

That means, I want to remove stack trace info:

java.lang.AssertionError:

and

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

Here, I wrote listener to get control over method execution, changed failure message:

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();
            }
        }
    }
}

and added it to test class :

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

But still I am getting same failure message :

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

Aucun commentaire:

Enregistrer un commentaire