Junit4中怎樣隨心所欲的執行Test(一)
使用junit4.4進行介面測試時,用來組織測試用例的測試類,我們稱之為“TestCase”。TestCase中的每個測試用例用@Test來標記,在這裡我們稱測試用例為“Test”。在eclipse中,使用junit4.4來編寫介面測試用例,可以單獨執行一個Test,也可以批量執行指定TestCase中的所有Test。現因業務需要,我們需要在服務端升級到現網後,挑選一些基礎用例來確認現網環境的正確性。因此我們只希望執行TestCase中指定的Test,而不是全部的Test,此時需要對junit進行擴充套件。
在junit4中,執行指定TestCase中的所有Test,只需要在eclipse中簡單的寫上以下幾行程式碼,就ok啦。只需要將待執行的TestCase類名新增到SuiteClasses中(eg:藍色部分),junit會自動為這些TestCase建立一個預設的TestSuite,再由junit中的TestRunner來執行這些TestSuite。預設的TestSuite中包含所有的Test,所以所有的Test都會被執行。
@RunWith(Suite.class)
@SuiteClasses( {
TestAppjumpReq.class,
TestCheckNameReq.class …... })
public class AllTestCases {
}
如果我們不想執行所有的Test,要麼為每個TestCase提供一個自定義的TestSuite,要麼對預設TestSuite中的Test進行過濾。前一種方法需要修改每個TestCase的程式碼,並有一定的侵入性,所以後一種方法更好。經過檢視junit4.4的api,發現junit4提供了一個抽象類:Filter(過濾器),擴充套件這個類就可以過濾出預設TestSuite中應該執行的Test。實現方法如下:
1. 先寫一個類繼承Filter,通過使用者告知的Test名稱來過濾出對應的Test,程式碼如下:
public class BaseTestFilter extends Filter{
private String methodname;
public BaseTestFilter(String methodname){
this.methodname=methodname;
}
@Override
public String describe() {
return methodname+"should test.";
}
@Override
public boolean shouldRun(Description arg0) {
String name = arg0.getDisplayName().split("\\(")[0].trim();
if(name.equals((methodname.trim()))){
return true;
}
return false;
}
}
2. 再寫一個類,來執行過濾後的TestSuite,程式碼如下:
public class BaseTestSuites {
public static Test suite() throws Exception {
TestSuite suite = new TestSuite("test for base testcase.");
JUnit4TestAdapter testAdapter;
//通過過濾器,新增基礎測試到TestSuite中
for(int i=0;i<testClasses.length;i++){
testAdapter= new JUnit4TestAdapter(testClasses[i]);
testAdapter.filter(new BaseTestFilter(testNames[i]));
suite.addTest(testAdapter);
}
return suite;
}
public static void main(String[] args) throws Exception{
junit.textui.TestRunner.run(BaseTestSuites.suite());
}
//待執行的TestCase
private static Class[] testClasses = {
TestAppjumpReq.class,
TestCheckNameReq.class,
……
};
//與上述TestCase對應一一對應,待執行的Test方法名。
private static String[] testNames = {
"testAppjump_normal",
"testCheckName_normal",
……
};
}