还记得培训半路出家来搞JAVA的时候,老师讲的第一个开源框架就是junit,当时觉得是还挺好用的,在myeclipse中右键单击一下,对于按照juni规定格式的方法就会运行,并判断是否和断言也就是你预期的效果是否一致。当时,觉得挺没用的,不就是断言吗,就是得到一个预期的结果,我打个断电点不也一样。现在回想自己以前有的时候还是真的挺搞笑的,有多少人就是忽略了细节鄙夷小事情,如此积月累下来,给自己带来了多么大的损失啊。
很后悔自己以前没有坚持写笔记、日志,前些天看到某个前辈说:学习了的内容如果没有用文字记录下来不算是自己学到的;可能与原文有点出入,但是大体上表达应该是:学习是需要沉淀的,沉淀的东西表现就是自己理解过后的文字东西。
进入本文主题讨论部分,以一个junit自带的案例还研究junit的基本组件TestCase、TestSuite、TestRunner和TestListener:
package junit.samples;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import junit.framework.Test;
import junit.framework.TestSuite;
/**
* TestSuite that runs all the sample tests
*/
public class AllTests {
public static void main(String[] args) throws Exception, SecurityException, NoSuchMethodException {
junit.textui.TestRunner.run(suite());//运行suite类中添加的测试方法,使用junit的自带的TestRunner
try {
throw new IOException("test...");
} catch (Exception e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
System.err.println(sw.toString());
System.out.println(AllTests.class.getName());
}
}
public static Test suite() {
TestSuite suite = new TestSuite("All JUnit Tests");//创建添加类的测试方法组件
suite.addTest(ListTest.suite());
suite.addTest(new TestSuite(junit.samples.money.MoneyTest.class));
suite.addTest(junit.tests.AllTests.suite());
return suite;
}
}
由于不怎么会画UML图,对于这几个组件关系尽力用简短自己文字描述一哈,不喜勿喷哈。
先说说TestRunner这个类,这个类继承了BaseTestRunner,而BaseTestRunner实现了TestListener;BaseTestRunner这个类实现了一些基础方法,两位大师备注很详细,可以自己看看。我拿个对于我们初步研究这几个组件的方法来和大家分享一下:
/**
* Returns the Test correspo