package org.test4j.tools.commons; import java.lang.reflect.Method; import java.util.LinkedList; import java.util.List; import org.test4j.module.Test4JException; /** * 获得一个类(方法)的测试类(方法)的工具 * * @author darui.wudr * */ @SuppressWarnings({ "rawtypes" }) public class MethodFinder { /** * 获得claz的所有测试类 * * @param claz * @return */ public static List<String> findTestClaz(Class claz) { List<String> clazzes = ClazzFinder.findClazz(claz); String classname = claz.getName(); List<String> tests = MethodFinder.filterClaz(clazzes, classname); return tests; } /** * 获得claz的所有测试类 * * @param claz * @return */ public static List<String> findTestClaz(String claz) { List<String> clazzes = ClazzFinder.findClazz(claz); String classname = claz.substring(claz.lastIndexOf(".")); List<String> tests = MethodFinder.filterClaz(clazzes, classname); return tests; } private static List<String> filterClaz(List<String> clazzes, String classname) { List<String> tests = new LinkedList<String>(); if (clazzes == null) { return tests; } for (String _claz : clazzes) { if (_claz.contains("$") || _claz.equals(classname)) { continue; } if (_claz.contains(classname)) { tests.add(_claz); } } return tests; } /** * 获得method的所有测试方法 * * @param claz * @param method * @return */ public static List<String> findTestMethod(Class claz, Method method) { return MethodFinder.findTestMethod(claz.getName(), method.getName()); } /** * 获得method的所有测试方法 * * @param claz * @param method * @return */ public static List<String> findTestMethod(Class claz, String methodname) { List<String> clazzes = MethodFinder.findTestClaz(claz); List<String> testmethods = new LinkedList<String>(); for (String classname : clazzes) { Class clazz = null; try { clazz = Class.forName(classname); } catch (ClassNotFoundException e) { throw new Test4JException(e); } Method[] methods = clazz.getMethods(); for (Method method : methods) { if (method.getName().indexOf(methodname) == 0 || method.getName().indexOf("test_" + methodname) == 0) { testmethods.add(classname + "." + method.getName()); } } } return testmethods; } /** * 获得method的所有测试方法 * * @param claz * @param method * @return * @throws ClassNotFoundException */ public static List<String> findTestMethod(String classname, String methodname) { try { Class claz = Class.forName(classname); return MethodFinder.findTestMethod(claz, methodname); } catch (ClassNotFoundException e) { throw new Test4JException(e); } } }