在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
答案 0 :(得分:0)
ITestListener#onTestFailure
这就是你所需要的。
您将获得ITestResult
和getThrowable()
的{{1}}个实例 - 您可以通过任何方式修改它们。
答案 1 :(得分:-1)
您可能需要考虑使用if语句来测试您的情况。如果结果是假的,只需打印出你的消息
if("your condition"){
}else{
System.out.println("some message");
throw "applicable exception";
}