在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
这就是您所需要的。
在那里,您将获得带有ITestResult
和getThrowable()
的setThrowable()
实例-您可以按自己喜欢的任何方式对其进行修改。
关于unit-testing - 我们如何从TestNG中的失败消息中删除java.lang.AssertionError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49769359/