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源码分析.docJUnit源码分析.docJUnit源码分析.docJUnit源码分析.docJUnit源码分析.doc
NULL 博文链接:https://lvwenwen.iteye.com/blog/1934965
NULL 博文链接:https://huihai.iteye.com/blog/1994270
初次写testsuite会遇到“NO runnable methods”,添加@Test也没有解决问题,看了多个文档实例,终于解决了这个问题,愿意跟大家一起分享,添加了资源分2分,迫于我去下载资源跟我要分啊。java源代码。
JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。 2 单元测试概念 单元:在Java中,一个类就是一个单元 单元测试:程序猿编写的一小段代码,用来对某个类中的...
重点讲到了junit里用到了那些设计模式.
junit框架,基于源码分析runner实现原理
junit 的源码jar包 junit 的源码jar包 junit 的源码jar包
Junit jar包以及 Junit 源码包
junit test
junit.framework.TestSuite.class junit.framework.package-info.class junit.runner.BaseTestRunner.class junit.runner.TestRunListener.class junit.runner.Version.class junit.runner.package-info.class junit...
自定义junit,简单版本,配套博客地址为http://blog.csdn.net/q5841818
JspTest是一个不依赖予容器,对jsp页面进行单元测试的junit扩展。内部它使用Jasper作为jsp编译引擎---tomcat的jsp引擎。对于使用maven作为构建工具的团队或个人,使用非常简单,添加下面的依赖到你的pom文件 ...
JUnit4.8.1源码包 版本4.8.1 只有源码。
Junit4 Test 单元测试 Junit4 Test 单元测试 Junit4 Test 单元测试
Junit设计模式分析 Junit设计模式分析 Junit设计模式分析 Junit设计模式分析
JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。 [1] JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是...
JUnit Jupiter + JUnit Vintage,包含依赖包:junit-jupiter-5.5.1.jar,junit-jupiter-engine-5.5.1.jar,junit-jupiter-params-5.5.1.jar,junit-platform-launcher-1.5.1.jar,junit-platform-testkit-1.5.1.jar,...
JUnit设计模式分析 详细讲解JUnit源码中用到的设计模式