Junit模板方法模式應(yīng)用
模板模式在junit3中的應(yīng)用
查看TestCase.java源代碼
public abstract class TestCase extends Assert implements Test {
public void runBare() throws Throwable {
setUp();
try {
runTest();
}
finally {
tearDown();
}
}
protected void setUp() throws Exception {
}
protected void tearDown() throws Exception {
}
protected void runTest() throws Throwable {
assertNotNull(fName);
Method runMethod= null;
try {
runMethod= getClass().getMethod(fName, null); //null表示測(cè)試方法必須是無參的
} catch (NoSuchMethodException e) {
fail("Method ""+fName+"" not found");
}
if (!Modifier.isPublic(runMethod.getModifiers())) {
fail("Method ""+fName+"" should be public"); //明確表示測(cè)試方法必須是public修飾的
}
runMethod.invoke(this, new Class[0]);
}
}
在TestCase.java中的runBare()方法中定義了測(cè)試方法的執(zhí)行步驟:setUp()-->runTest()-->tearDown(); 具體方法的真正實(shí)現(xiàn)推遲到子類中去實(shí)現(xiàn)。
junit3中引入模板方式模式的好處:
1)將各個(gè)測(cè)試用例中的公共的行為(初始化信息和釋放資源等)被提取出來,可以避免代碼的重復(fù),簡(jiǎn)化了測(cè)試人員的工作;
2)在TestCase中實(shí)現(xiàn)一個(gè)算法的不變部分,并且將可變的行為留給子類來實(shí)現(xiàn)。增強(qiáng)了系統(tǒng)的靈活性。使JUnit框架僅負(fù)責(zé)算法的輪廓和骨架,而開發(fā)人員則負(fù)責(zé)給出這個(gè)算法的各個(gè)邏輯步驟。