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的@Test注解是如何触发测试方法的执行,以及Testcast Testsuite如何读取和执行测试计划。源码学习可以帮助我们...
**Junit源码分析(圣思园)** Junit是Java编程语言中最广泛使用的单元测试框架,它使得开发者能够方便地编写和运行可重复的、可靠的测试用例。本篇文章将深入探讨Junit的源码,揭示其内部工作原理,帮助我们更好地...
10. **持续集成**:JUnit源码也揭示了如何将测试集成到持续集成(CI)系统,如Jenkins、Travis CI等,确保每次代码变更后都能自动运行测试并获取反馈。 总的来说,分析《JUnit in Action》的源码,不仅可以帮助我们...
【标题】"junit4 单元测试源码"涉及的是Java编程中单元测试的重要工具JUnit4的使用,这是对代码进行验证和调试的关键部分。JUnit4是JUnit框架的一个版本,它提供了更灵活的注解、测试套件管理和断言方式,使得编写...
JUnit4是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了编写和运行可重复、可靠的测试用例的工具。这个"junit4测试源码"可能包含了JUnit4框架的源代码,使得用户能够深入理解其内部工作原理,便于...
本篇将深入分析JUnit源码中的设计模式,帮助你理解其内在的架构原理,提升你的编程技能。 首先,JUnit的核心设计原则之一是“开闭原则”(Open-Closed Principle),它主张软件实体(类、模块、函数等)应对于扩展...
JUnit是Java编程语言中最常用的单元测试框架之一,它极大地简化了对代码进行验证和调试的过程。这个压缩包包含了肯特(Kent Beck)参与编写的JUnit 4的部分源代码。肯特·贝克是极限编程(XP)的创始人之一,也是...
9. **源码分析**:可能深入到JUnit的源代码,解释其设计模式,如观察者模式、装饰器模式,以及JUnit如何处理测试失败和测试报告。 10. **实战示例**:结合实际项目,展示如何利用JUnit进行单元测试,解决实际问题。...
4. **学习设计模式**: JUnit源码中应用了许多设计模式,如工厂模式、装饰器模式等,这些都是软件设计中的重要概念。 **总结:** JUnit 3.8.2虽然已经是一个较旧的版本,但它仍然能帮助开发者理解和学习单元测试的...
【JUnit 框架详解】 JUnit 是一个广泛使用的 Java 编程语言的单元测试框架,由 Erich Gamma 和 Kent Beck 开发,它是 xUnit 家族的...结合源码分析,将帮助你更好地理解和应用这些概念,提升你的编程技能和代码质量。
JUnit 3.8.1的架构设计鼓励用户自定义测试规则和行为,例如通过扩展`TestCase`和`TestSuite`,或者实现`Test`接口来创建新的测试类。 7. **运行模式** JUnit支持命令行运行和IDE集成运行两种方式。通过源码,我们...
10. **独立运行器(Test Runners)**:尽管没有像JUnit 4那样的自定义运行器,但可以通过扩展`TestSuite`类实现一些定制行为。 学习`Junit-3.8.1`源码有助于理解测试框架的设计模式,比如观察者模式、工厂模式等,...
《深入理解JUnit源码》 JUnit,作为Java领域最广泛使用的单元测试框架,它的源码是许多开发者学习和研究的对象。本课程资源旨在帮助你深入理解JUnit的工作原理,提升你的测试编写技巧,以及对测试驱动开发(TDD)有...
**Android兼容性测试套件(Android Compatibility Test Suite,简称CTS)**是Google为确保不同设备制造商生产的Android设备能够遵循统一的API行为和兼容性标准而设计的一套测试工具。通过执行CTS,开发者和制造商...
源码中包含了JUnit的测试套件(Test Suite)、测试案例(Test Case)和测试规则(Test Rule)等核心组件。测试套件用于组织多个测试案例,而测试案例则是最小的可测试单元,通常对应于一个或几个相关的方法。测试...
除了上述功能,JUnit 4.8.1还支持测试套件(Test Suite),通过`@Suite`注解可以将多个测试类组合在一起执行。这在处理大型项目或需要批量运行测试时非常有用。 通过阅读和分析`junit-4.8.1-src.jar`源代码,你可以...
JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可执行的测试用例来验证代码的功能。JUnit测试源码对于理解测试框架的工作原理、学习如何编写有效的测试以及定制JUnit行为都非常重要。在这个名为...
通过分析和学习`junit4.8.2`的源码,开发者可以了解到测试框架的设计思想,理解如何构建测试框架,同时也能提升自己在软件测试领域的技能。对于Java开发者来说,熟悉和掌握JUnit不仅是提高代码质量的必备工具,也是...