package org.test4j.module.core.utility; import java.lang.reflect.Method; import org.test4j.module.core.CoreModule; import org.test4j.module.core.TestListener; /** * test4j Listener执行器 * * @author darui.wudr */ public class ListenerExecutor { private final static String TEST_CLAZZ_INFO = "%s executing test class[%s] in thread[%d]."; private final static String TEST_METHOD_INFO = "%s executing test method[%s . %s ()] in thread[%d]."; /** * 执行setup class的事件 * * @param testedObject 测试对象 * @return 事件异常 */ @SuppressWarnings("rawtypes") public static Throwable executeBeforeClassEvents(Class testClazz) { String hits = String.format(TEST_CLAZZ_INFO, "Begin", testClazz.getName(), Thread.currentThread().getId()); MessageHelper.info("\n\n\n" + hits); try { getTestListener().beforeClass(testClazz); return null; } catch (Throwable e) { e.printStackTrace(); return e; } } /** * 执行setup method事件 * * @param testedObject 测试对象 * @param testedMethod 测试方法 * @return 事件异常 */ public static Throwable executeBeforeMethodEvents(Object testedObject, Method testedMethod) { String hits = String.format(TEST_METHOD_INFO, "Begin", testedObject.getClass().getName(), testedMethod.getName(), Thread.currentThread().getId()); MessageHelper.info("\n" + hits); try { getTestListener().beforeMethod(testedObject, testedMethod); return null; } catch (Throwable e) { e.printStackTrace(); return e; } } /** * 执行测试方法开始的事件 * * @param testedMethod 测试方法 * @return 返回事件异常 */ public static Throwable executeBeforeRunningEvents(Object testedObject, Method testedMethod) { try { getTestListener().beforeRunning(testedObject, testedMethod); return null; } catch (Throwable e) { return e; } } /** * 执行测试方法完毕后的事件 * * @param testedMethod 测试方法 * @param error 测试方法异常 * @return 返回事件异常 */ public static Throwable executeAfterRunnedEvents(Object testedObject, Method testedMethod, Throwable error) { try { getTestListener().afterRunned(testedObject, testedMethod, error); return null; } catch (Throwable e) { return e; } } /** * 执行teardown method事件 * * @param testedObject 测试对象 * @param testedMethod 测试方法 * @return 事件异常 */ public static Throwable executeAfterMethodEvents(Object testedObject, Method testedMethod) { String hits = String.format(TEST_METHOD_INFO, "End", testedObject.getClass().getName(), testedMethod.getName(), Thread.currentThread().getId()); try { getTestListener().afterMethod(testedObject, testedMethod); return null; } catch (Throwable e) { e.printStackTrace(); return e; } finally { MessageHelper.info(hits + "\n"); } } /** * 执行teardownClass的事件 * * @param testedObject 测试对象 * @return 事件异常 */ public static Throwable executeAfterClassEvents(Object testedObject) { String clazName = testedObject.getClass().getName(); String hits = String.format(TEST_CLAZZ_INFO, "End", clazName, Thread.currentThread().getId()); try { getTestListener().afterClass(testedObject); return null; } catch (Throwable e) { e.printStackTrace(); return e; } finally { MessageHelper.info(hits + "\n"); } } /** * @return The test4j test listener */ private static TestListener getTestListener() { return CoreModule.getTestListener(); } }