package org.test4j.testng;
import org.test4j.module.core.utility.MessageHelper;
import org.test4j.testng.Test4J;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.TestNG;
import org.testng.annotations.Test;
import org.testng.internal.IResultListener;
@SuppressWarnings({ "rawtypes" })
public class TestNgListenerDemo {
public static void main(String[] args) {
TestNgListenerDemo.runTests(new Class[] { DemoTest.class });
}
public static void runTests(Class[] clazzes) {
TestNG tng = new TestNG();
tng.addListener(new TestNgRunListener());
tng.setTestClasses(clazzes);
tng.run();
}
protected static class TestNgRunListener implements IResultListener {
public void onStart(ITestContext context) {
}
public void onTestFailure(ITestResult itr) {
MessageHelper.info("fail " + getDisplayName(itr));
itr.getThrowable().printStackTrace();
MessageHelper.info("=========================");
trace();
}
public void onTestSkipped(ITestResult itr) {
MessageHelper.info("skip " + getDisplayName(itr));
}
public void onTestStart(ITestResult result) {
}
public void onTestSuccess(ITestResult itr) {
String displayName = getDisplayName(itr);
MessageHelper.info("pass " + displayName);
}
public void onFinish(ITestContext context) {
MessageHelper.info("end testng test");
}
public void onTestFailedButWithinSuccessPercentage(ITestResult itr) {
MessageHelper.info("onTestFailedButWithinSuccessPercentage");
}
public void onConfigurationFailure(ITestResult itr) {
MessageHelper.info("configuraion failure " + getDisplayName(itr));
}
public void onConfigurationSkip(ITestResult itr) {
}
public void onConfigurationSuccess(ITestResult itr) {
MessageHelper.info(getDisplayName(itr));
}
}
private final static String getDisplayName(ITestResult result) {
String clazz = result.getTestClass().getName();
String method = result.getMethod().getMethodName();
return method + "(" + clazz + ")";
}
private final static void trace() {
for (StackTraceElement tr : Thread.currentThread().getStackTrace()) {
MessageHelper.info(tr.toString());
}
}
protected class DemoTest extends Test4J {
public DemoTest() {
}
@Test(expectedExceptions = { AssertionError.class })
public void wantAssert_Failure() {
want.fail("error message");
// want.bool(true).isEqualTo(false);
trace();
}
}
}