使用代码方式运行指定单元测试类及方法

上一篇 / 下一篇  2010-01-20 13:42:56 / 个人分类:单元测试

  记一下,备忘
MUl*myF9T_0
|8C!K$X^:mm0
  1. private void runTest(String className, String... methodNames) throws Exception {  
  2.     assert StringUtils.isNotBlank(className);  
  3.     Class<?> testClass = Class.forName(className);  
  4.     Runner runner = getRunner(testClass);  
  5.     if (runner instanceof Suite) {  
  6.         SuiteClasses ann = testClass.getAnnotation(Suite.SuiteClasses.class);  
  7.         Class<?>[] testClasses = ann.value();  
  8.         for (Class<?> clazz : testClasses) {  
  9.             run(clazz, getRunner(clazz), methodNames);  
  10.         }  
  11.     } else {  
  12.         run(testClass, runner, methodNames);  
  13.     }  
  14. }  
  15.   
  16. private Runner getRunner(Class<?> testClass) {  
  17.     Request request = Request.aClass(testClass);  
  18.     Runner runner = request.getRunner();  
  19.     return runner;  
  20. }  
  21.   
  22. private void run(Class<?> testClass, Runner runner, String... methodNames) throws NoSuchMethodException,  
  23.         NoSuchFieldException, IllegalAccessException {  
  24.     if (runner instanceof IgnoredClassRunner)  
  25.         return;  
  26.   
  27.     JUnit4ClassRunner j4Runner = (JUnit4ClassRunner) runner;  
  28.     Class<?> runnerClass = j4Runner.getClass();  
  29.     while (runnerClass != JUnit4ClassRunner.class) {  
  30.         runnerClass = runnerClass.getSuperclass();  
  31.         if (runnerClass == Object.class) {  
  32.             break;  
  33.         }  
  34.     }  
  35.     if (methodNames != null && methodNames.length != 0) {  
  36.         String fielName = "fTestMethods";  
  37.         Field fTestMethods = runnerClass.getDeclaredField(fielName);  
  38.         if (fTestMethods == null) {  
  39.             throw new RuntimeException(String.format("the runner class[%s]'s field[%s] is not existed!",  
  40.                     runnerClass,  
  41.                     fielName));  
  42.         }  
  43.         List<Method> methods = new ArrayList<Method>(methodNames.length);  
  44.         for (String methodName : methodNames) {  
  45.             if (StringUtils.isBlank(methodName))  
  46.                 continue;  
  47.   
  48.             Method testMethod = testClass.getDeclaredMethod(methodName);  
  49.             methods.add(testMethod);  
  50.         }  
  51.         fTestMethods.setAccessible(true);  
  52.         fTestMethods.set(j4Runner, methods);  
  53.     }  
  54.     JUnitCore core = new JUnitCore();  
  55.     core.addListener(getRunListener());  
  56.     core.run(runner);  
  57. }  
  58.   
  59. private RunListener getRunListener() {  
  60.     return new RunListener() {  
  61.         @Override  
  62.         public void testRunStarted(Description description) throws Exception {  
  63.             logger.debug("开始测试类" + description.getDisplayName());  
  64.         }  
  65.   
  66.         @Override  
  67.         public void testRunFinished(Result result) throws Exception {  
  68.             logger.debug("测试结束" + "\n");  
  69.         }  
  70.   
  71.         @Override  
  72.         public void testStarted(Description description) throws Exception {  
  73.             logger.debug("\t开始测试方法:" + description.getDisplayName());  
  74.         }  
  75.   
  76.         @Override  
  77.         public void testFinished(Description description) throws Exception {  
  78.             logger.debug("\t结束测试方法");  
  79.         }  
  80.   
  81.         @Override  
  82.         public void testFailure(Failure failure) throws Exception {  
  83.             Throwable exception = failure.getException();  
  84.             logger.error("", exception);  
  85.         }  
  86.     };  

  87. $V7D4Q&n [Q6Af _.@0

TAG:

 

评分:0

我来说两句

Open Toolbar