有关Junit的 源代码分析

有关Junit的 源代码分析-海鑫盛高新科技 app开发设计|app制作|企业网站建设|企业网站建设企业|手机软件开发设计|手机微信开发设计 网站建设 企业网站建设 网站建设网站制作SEO提升网站实例网站处理计划方案 APP开发设计 IOS_APP开发设计HTML5开发设计 Android(安卓系统)开发设计 APP实例 商城系统版APP手机软件社交媒体版APP定制日常生活服务版APP运用公司版APP模板餐馆版APP定制4S店版APP展现诊疗版APP运用 版APP作用 处理计划方案 手机微信开发设计 APP新闻资讯 商品技术性公司动态性制造行业动态性技术性新闻资讯公司管理方法新闻报道网络热点APP学馆普遍难题 Seo服务 好推建网站

7*24完全免费电話

0

当今部位 > 首页 > APP新闻资讯 > 技术性新闻资讯 > 有关Junit的 源代码分析 时间::34 创作者:墨鱼 源于:贵州省海鑫盛app开发设计企业



junit4 下的全部的testcase全是在Runner下实行的, 能够将Runner了解为junit运作的器皿, 默认设置状况下junit会应用JUnit4ClassRunner做为全部testcase的实行器皿。

假如要订制自身的junit, 则能够完成自身的Runner,非常简单的方法便是Junit4ClassRunner承继, spring-test, unitils这种架构便是选用那样的作法。

当在spring中是SpringJUnit4ClassRunner, 在unitils中是UnitilsJUnit4TestClassRunner, 一般大家的testcase全是在根据eclipse软件来实行的, eclipse的junit软件会在实行的情况下会原始化特定的Runner。原始化的全过程能够在ClassRequest中寻找。


.junit.internal.runners;
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
.junit.runner.Description;
.junit.runner.Runner;
.junit.runner.manipulation.Filter;
.junit.runner.manipulation.Filterable;
.junit.runner.manipulation.NoTestsRemainException;
.junit.runner.manipulation.Sortable;
.junit.runner.manipulation.Sorter;
.junit.runner.notification.Failure;
.junit.runner.notification.RunNotifier;
.junit.runners.BlockJUnit4ClassRunner;
 * @deprecated Included for patibility with JUnit 4.4. Will be
 * removed in the next release. Please use
 * {@link BlockJUnit4ClassRunner} in place of
 * {@link JUnit4ClassRunner}.
 * 
 * This may disappear as soon as 1 April 2009
 */
@Deprecated
public class JUnit4ClassRunner extends Runner implements Filterable, Sortable
 private final ListfTestMethods;
 private TestClass fTestClass;
 //即将检测的TestCase案例Class目标传到
 public JUnit4ClassRunner(Class klass) throws InitializationError
 {
 fTestClass = new TestClass(klass);
 fTestMethods = getTestMethods();
 //对要开展检测的方式进行认证
 validate();
 }
 
 //
 protected ListgetTestMethods()
 {
 return fTestClass.getTestMethods();
 }
 //对要开展检测的方式进行认证
 protected void validate() throws InitializationError
 {
 MethodValidator methodValidator = new MethodValidator(fTestClass);
 ();
 ();
 }
 @Override
 public void run(final RunNotifier notifier)
 {
 new ClassRoadie(notifier, fTestClass, getDescription(), new Runnable()
 {
 public void run()
 {
 runMethods(notifier);
 }
 }).runProtected();
 }
 protected void runMethods(final RunNotifier notifier)
 {
 for (Method method : fTestMethods)
 invokeTestMethod(method, notifier);
 }
 @Override
 public Description getDescription()
 {
 Description spec = (getName(), classAnnotations());
 ListtestMethods = fTestMethods;
 for (Method method : testMethods)
 (methodDescription(method));
 return spec;
 }
 protected Annotation[] classAnnotations()
 {
 return fTestClass.getJavaClass().getAnnotations();
 }
 protected String getName()
 {
 return getTestClass().getName();
 }
 protected Object createTest() throws Exception
 {
 return getTestClass().getConstructor().newInstance();
 }
 protected void invokeTestMethod(Method method, RunNotifier notifier)
 {
 Description description = methodDescription(method);
 Object test;
 try
 {
 test = createTest();
 }
 catch(InvocationTargetException e)
 {
 testAborted(notifier, description, ());
 return;
 }
 catch(Exception e)
 {
 testAborted(notifier, description, e);
 return;
 }
 TestMethod testMethod = wrapMethod(method);
 new MethodRoadie(test, testMethod, notifier, description).run();
 }
 private void testAborted(RunNotifier notifier, Description description, Throwable e)
 {
 (description);
 (new Failure(description, e));
 (description);
 }
 protected TestMethod wrapMethod(Method method)
 {
 return new TestMethod(method, fTestClass);
 }
 protected String testName(Method method)
 {
 return method.getName();
 }
 protected Description methodDescription(Method method)
 {
 return Description.createTestDescription(getTestClass().getJavaClass(), testName(method), testAnnotations(method));
 }
 protected Annotation[] testAnnotations(Method method)
 {
 return method.getAnnotations();
 }
 public void filter(Filter filter) throws NoTestsRemainException
 {
 for (Iteratoriter = (); ();)
 {
 Method method = ();
 if (!(methodDescription(method)))
 ();
 }
 if (())
 throw new NoTestsRemainException();
 }
 public void sort(final Sorter sorter)
 {
 (fTestMethods, new Comparator()
 {
 public pare(Method o1, Method o2)
 {
 return&pare(methodDescription(o1), methodDescription(o2));
 }
 });
 }
 protected TestClass getTestClass()
 {
 return fTestClass;
 }
}

不一样于上一节提及的类

.junit.internal.runners;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
.junit.AfterClass;
.junit.Before;
.junit.BeforeClass;
.junit.Test;
.junit.runners.BlockJUnit4ClassRunner;
 * @deprecated Included for patibility with JUnit 4.4. Will be
 * removed in the next release. Please use
 * {@link BlockJUnit4ClassRunner} in place of
 * {@link JUnit4ClassRunner}.
 */
@Deprecated
public class TestClass
 private final Class fClass;
 public TestClass(Class klass)
 {
 fClass = klass;
 }
 public ListgetTestMethods()
 {
 return getAnnotatedMethods();
 }
 ListgetBefores()
 {
 return getAnnotatedMethods();
 }
 ListgetAfters()
 {
 return getAnnotatedMethods();
 }
 public ListgetAnnotatedMethods(Class annotationClass)
 {
 Listresults = new ArrayList();
 for (Class eachClass : getSuperClasses(fClass))
 {
 Method[] methods = ();
 for (Method eachMethod : methods)
 {
 Annotation annotation = (annotationClass);
 if (annotation != null   !isShadowed(eachMethod, results))
 (eachMethod);
 }
 }
 if (runsTopToBottom(annotationClass))
 (results);
 return results;
 }
 private boolean runsTopToBottom(Class annotation)
 {
 return () || ();
 }
 private boolean isShadowed(Method method, Listresults)
 {
 for (Method each : results)
 {
 if (isShadowed(method, each))
 return true;
 }
 return false;
 }
 private boolean isShadowed(Method current, Method previous)
 {
 if (!().equals(()))
 return false;
 if (().length != ().length)
 return false;
 for (int i = 0; i   ().length; i++)
 {
 if (!()[i].equals(()[i]))
 return false;
 }
 return true;
 }
 private List Class  getSuperClasses(Class testClass)
 {
 ArrayList Class  results = new ArrayList Class 
 Class current = testClass;
 while (current != null)
 {
 (current);
 current = ();
 }
 return results;
 }
 public Constructor getConstructor() throws SecurityException, NoSuchMethodException
 {
 return fClass.getConstructor();
 }
 public Class getJavaClass()
 {
 return fClass;
 }
 public String getName()
 {
 return fClass.getName();
 }
}

用以在 类之中开展方式认证

.junit.internal.runners;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
.junit.After;
.junit.AfterClass;
.junit.Before;
.junit.BeforeClass;
.junit.Test;
.junit.runners.BlockJUnit4ClassRunner;
 * @deprecated Included for patibility with JUnit 4.4. Will be
 * removed in the next release. Please use
 * {@link BlockJUnit4ClassRunner} in place of {@link JUnit4ClassRunner}.
 */
@Deprecated
public class MethodValidator {
 private final ListfErrors= new ArrayList();
 private TestClass fTestClass;
 
 //类中
 //validate()方式中启用该结构涵数-----第一步
 public MethodValidator(TestClass testClass) {
 fTestClass = testClass;
 public void validateInstanceMethods() {
 validateTestMethods(After.class, false);
 validateTestMethods(, false);
 validateTestMethods(, false);
 Listmethods= ();
 if (() == 0)
 (new Exception( No runnable methods ));
 public void validateStaticMethods() {
 validateTestMethods(, true);
 validateTestMethods(, true);
 //Junit4ClassRunner类中启用第二步
 public&alidateMethodsForDefaultRunner() {
 //校检无参结构方式
 validateNoArgConstructor();
 //校检注释方式
 validateStaticMethods();
 validateInstanceMethods();
 return fErrors;
 //Junit4ClassRunner类中第三步
 public void assertValid() throws InitializationError {
 if (!())
 throw new InitializationError(fErrors);
 public void validateNoArgConstructor() {
 try {
 } catch (Exception e) {
 (new Exception( Test class should have public zero-argument constructor , e));
 //校检要检测的方式 是不是静态数据方式、是不是public方式、是不是回到值void、是不是无主要参数
 //@param annotation 要检测的annotation类 
 //@param isStatic 是不是规定静态数据方式
 private void validateTestMethods(Class annotation,boolean isStatic) {
 Listmethods= (annotation);
 for (Method each : methods) {
 if ((()) != isStatic) {
 String state= isStatic ?  should  :  should not 
 (new Exception( Method   + () +  ()  
 + state +   be static ));
 if (!(().getModifiers()))
 (new Exception( Class   + ().getName()
 +   should be public ));
 if (!(()))
 (new Exception( Method   + ()
 +   should be public ));
 if (() != )
 (new Exception( Method   + ()
 +   should be void ));
 if (().length != 0)
 (new Exception( Method   + ()
 +   should have no parameters ));

  戏剧化排版设计有什么方法?  
  互连网总流量太贵,如何合理的运用减少成本费?  
  让客户觉得温馨的网页页面网页页面载入设计方案  
  如何让网站标识充分发挥较大的功效?  
  分析Python源码  
  有关php版手机微信开发设计怎样接受信息,全自动分辨跟回应相对信息的方式  
  有关Java里边Integer的源代码  
 全新新闻资讯
互连网+怎样惠及农牧业? 普遍的二手买卖APP? APP中ui设计方案的关键性 公司企业网站建设价格通常为如何报的 怎样在贵阳市找一家做高档企业网站建设 作用强劲的app 运用开发设计制作服务平台 每天热搜榜
作用强劲的app 运用开发设计制作服务平台 普遍的二手买卖APP? 互连网+怎样惠及农牧业? 公司企业网站建设价格通常为如何报的 怎样在贵阳市找一家做高档企业网站建设 APP中ui设计方案的关键性