Java单元测试技术(8)

 抽象类TestCase
抽象类TestCase实现了接口Test,以下是接口Test的一个方法原型:
public abstract void run(TestResult result);
TestCase对这个方法的实现如下:
public void run(TestResult result) {
result.run(this);
}
对这个方法的调用又将主动权交给TestResult,由TestResult来执行对被测方法的调用,这样便于TestResult跟踪用例执行结果并记录下来,以便作最后的统计分析。
转到TestResult中这个方法的实现:
protected void run(final TestCase test) {
startTest(test);
Protectable p= new Protectable() {
public void protect() throws Throwable {
test.runBare();
}
};
runProtected(test, p);

endTest(test);
     //这个方法和上面的startTest用于调用TestListener接口对象,实现监听机制。
}
在这个方法中调用了TestCase的runBare方法:
public void runBare() throws Throwable {
setUp();
try {
runTest();
}
finally {
tearDown();
}
}
可以看到先调用了setUp,之后不管是否产生了异常,都一律调用了tearDown,这两个方法在TestCase中空实现,我们的用例子类可以覆盖(overload)这两个方法,用于用例执行前的初始环境建立和用例执行后的环境清除。接下来我们关注TestCase的runTest方法,看它如何调用到我们的测试方法的。前面提到,TestCase维护了一个用例名称,这个用例名称在TestCase实例化时传入,用例名称就是测试方法名,知道了测试方法名,也就知道了测试方法原型,使用JAVA的反射机制实现了对测试方法的调用。注意这个测试方法正是TestCase子类需要实现的。

你可能感兴趣的:(java)