`

【原】JUNIT 源码分析之TestSuite

    博客分类:
  • Test
 
阅读更多

    Junit是如何使用适配器模式的呢?概念上可以理解,但是实际上看了代码之后才更有意思。

 

   TestCase有一个参数叫fname。TestSuit使用组合模式将多个TestCase包括进来,包括的方法有三:

 

    创建空的TestSuite,将需要的TestCase的实例通过addTest方法加入,这些TestCase需要指明testXXX的方法名。

    要么直接传这个TestCase的class类型。

    最后是传一个class类型的数组进来。

 

    不管哪种方法,最后其实都走的是第一种方法,后面的两种方法只是类似重载构造方法罢了。在TestSuite里有个Vector,是用来存多个TestCase的实例的。

 

    当以第一种形式,创建空的TestSuite,再把包含testXXX方法名字的TestCase实例直接放放入Vector中。

   第二种形式,以class类型传入,首先通过class的自带方法getName解析class的类型,并把它赋给fName。然后解析class类型,得到所有的Junit认可的testXXX方法,将这些方法名,通过TestCase的带fName参数的构造函数生成一个个的TestCase实例,将这些实例放入Vector。

  可以看源码,addTestMethod是加入TestMethod的方法,另外它调用createTest(),这个方法创建不同的实例。

 

private void addTestMethod(Method m, Vector names, Class theClass) {
		String name= m.getName();
		if (names.contains(name))
			return;
		if (! isPublicTestMethod(m)) {
			if (isTestMethod(m))
				addTest(warning("Test method isn't public: "+m.getName()));
			return;
		}
		names.addElement(name);
		addTest(createTest(theClass, name));
	}


static public Test createTest(Class theClass, String name) {
		Constructor constructor;
		try {
			constructor= getTestConstructor(theClass);
		} catch (NoSuchMethodException e) {
			return warning("Class "+theClass.getName()+" has no public constructor TestCase(String name) or TestCase()");
		}
		Object test;
		try {
			if (constructor.getParameterTypes().length == 0) {
				test= constructor.newInstance(new Object[0]);
				if (test instanceof TestCase)
					((TestCase) test).setName(name);
			} else {
				test= constructor.newInstance(new Object[]{name});
			}
		} catch (InstantiationException e) {
			return(warning("Cannot instantiate test case: "+name+" ("+exceptionToString(e)+")"));
		} catch (InvocationTargetException e) {
			return(warning("Exception in constructor: "+name+" ("+exceptionToString(e.getTargetException())+")"));
		} catch (IllegalAccessException e) {
			return(warning("Cannot access test case: "+name+" ("+exceptionToString(e)+")"));
		}
		return (Test) test;
	}

 

 

 

 

     第三种形式,只是多次调用第二种形式的结果。

分享到:
评论

相关推荐

    junit eclipse testcast Testsuite

    通过分析JUnit和Eclipse Testcast Testsuite的源码,我们可以更深入地理解它们的工作原理。例如,JUnit的@Test注解是如何触发测试方法的执行,以及Testcast Testsuite如何读取和执行测试计划。源码学习可以帮助我们...

    Junit源码分析(圣思园)

    **Junit源码分析(圣思园)** Junit是Java编程语言中最广泛使用的单元测试框架,它使得开发者能够方便地编写和运行可重复的、可靠的测试用例。本篇文章将深入探讨Junit的源码,揭示其内部工作原理,帮助我们更好地...

    junit in action 源码

    10. **持续集成**:JUnit源码也揭示了如何将测试集成到持续集成(CI)系统,如Jenkins、Travis CI等,确保每次代码变更后都能自动运行测试并获取反馈。 总的来说,分析《JUnit in Action》的源码,不仅可以帮助我们...

    junit4 单元测试源码

    【标题】"junit4 单元测试源码"涉及的是Java编程中单元测试的重要工具JUnit4的使用,这是对代码进行验证和调试的关键部分。JUnit4是JUnit框架的一个版本,它提供了更灵活的注解、测试套件管理和断言方式,使得编写...

    junit4测试源码

    JUnit4是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了编写和运行可重复、可靠的测试用例的工具。这个"junit4测试源码"可能包含了JUnit4框架的源代码,使得用户能够深入理解其内部工作原理,便于...

    JUnit设计模式分析

    本篇将深入分析JUnit源码中的设计模式,帮助你理解其内在的架构原理,提升你的编程技能。 首先,JUnit的核心设计原则之一是“开闭原则”(Open-Closed Principle),它主张软件实体(类、模块、函数等)应对于扩展...

    Junit源码【肯特版】好像是4.几版忘了

    JUnit是Java编程语言中最常用的单元测试框架之一,它极大地简化了对代码进行验证和调试的过程。这个压缩包包含了肯特(Kent Beck)参与编写的JUnit 4的部分源代码。肯特·贝克是极限编程(XP)的创始人之一,也是...

    JUnit -- 分析

    9. **源码分析**:可能深入到JUnit的源代码,解释其设计模式,如观察者模式、装饰器模式,以及JUnit如何处理测试失败和测试报告。 10. **实战示例**:结合实际项目,展示如何利用JUnit进行单元测试,解决实际问题。...

    junit3.8.2 jar包和源码

    4. **学习设计模式**: JUnit源码中应用了许多设计模式,如工厂模式、装饰器模式等,这些都是软件设计中的重要概念。 **总结:** JUnit 3.8.2虽然已经是一个较旧的版本,但它仍然能帮助开发者理解和学习单元测试的...

    北京圣思园 junit全套笔记及源码

    【JUnit 框架详解】 JUnit 是一个广泛使用的 Java 编程语言的单元测试框架,由 Erich Gamma 和 Kent Beck 开发,它是 xUnit 家族的...结合源码分析,将帮助你更好地理解和应用这些概念,提升你的编程技能和代码质量。

    junit3.81 src

    JUnit 3.8.1的架构设计鼓励用户自定义测试规则和行为,例如通过扩展`TestCase`和`TestSuite`,或者实现`Test`接口来创建新的测试类。 7. **运行模式** JUnit支持命令行运行和IDE集成运行两种方式。通过源码,我们...

    Junit-3.8.1 src

    10. **独立运行器(Test Runners)**:尽管没有像JUnit 4那样的自定义运行器,但可以通过扩展`TestSuite`类实现一些定制行为。 学习`Junit-3.8.1`源码有助于理解测试框架的设计模式,比如观察者模式、工厂模式等,...

    Junit sourcecode

    《深入理解JUnit源码》 JUnit,作为Java领域最广泛使用的单元测试框架,它的源码是许多开发者学习和研究的对象。本课程资源旨在帮助你深入理解JUnit的工作原理,提升你的测试编写技巧,以及对测试驱动开发(TDD)有...

    Android Compatibility Test Suite

    **Android兼容性测试套件(Android Compatibility Test Suite,简称CTS)**是Google为确保不同设备制造商生产的Android设备能够遵循统一的API行为和兼容性标准而设计的一套测试工具。通过执行CTS,开发者和制造商...

    junit-master.zip

    源码中包含了JUnit的测试套件(Test Suite)、测试案例(Test Case)和测试规则(Test Rule)等核心组件。测试套件用于组织多个测试案例,而测试案例则是最小的可测试单元,通常对应于一个或几个相关的方法。测试...

    JUnit 4.8.1源码

    除了上述功能,JUnit 4.8.1还支持测试套件(Test Suite),通过`@Suite`注解可以将多个测试类组合在一起执行。这在处理大型项目或需要批量运行测试时非常有用。 通过阅读和分析`junit-4.8.1-src.jar`源代码,你可以...

    JUnit测试源码

    JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可执行的测试用例来验证代码的功能。JUnit测试源码对于理解测试框架的工作原理、学习如何编写有效的测试以及定制JUnit行为都非常重要。在这个名为...

    junit4.8.2.zip

    通过分析和学习`junit4.8.2`的源码,开发者可以了解到测试框架的设计思想,理解如何构建测试框架,同时也能提升自己在软件测试领域的技能。对于Java开发者来说,熟悉和掌握JUnit不仅是提高代码质量的必备工具,也是...

Global site tag (gtag.js) - Google Analytics