天天看點

Java基金會——JUnit

JUnit     

      測試的重要性毋庸質疑。但怎樣使測試更加準确和全面。而且獨立于項目之外而且避免寫死,JUnit給了我們一個非常好的解決方式。

       能夠說JUnit是為單元測試而生的,一個Java語言的單元測試架構。當然,和JUnit類似的。其它語言的單元測試架構還有:CppUnit、NUnit等,差點兒全部的單元測試工具XUnit都是按照JUnit來寫的。

一、JUnit的命名規則和習慣

   1、假設有一個名為ClassA的被測試函數,那麼測試類的名稱就是TestClassA

   2、假設有一個名為methodA的被測試函數。那麼測試函數的名稱就是testMethodA

 示範樣例

 首先如果有一個項目類Classs例如以下:

public class Classs {
Studentstudent=null;
//傳回學生集合
publicList<Student> QueryStudent(){
List<Student>lsts=new ArrayList<Student>();
returnlsts;                
}

publicStudent QueryOne(){
returnstudent;
}
}      

當中定義了一個QueryStudent方法傳回一個集合;QueryOne的方法傳回一個對象。好。如今我們要對方法進行測試。

public final voidtestQueryStudent() {
ClasssmyClass=new Classs();
assertNotNull(myClass.QueryStudent());
}

publicfinal void testQueryOne() {
ClasssmyClass=new Classs();
assertNotNull(myClass.QueryOne());
}      

    這種方法在JUnit架構中稱之為一個斷言,JUnit提供給我們了非常多斷言,比方assertEqual,assertTrue...,我們能夠利用這些斷言來推斷兩個值是否相等或者二進制條件是否為真等問題。

   然後我們能夠執行JUnit來檢測我們的測試結果,這樣我們在不影響Project檔案的前提下,實作了對Project單元的測試。

     在JUnit架構下,他會自己主動執行全部以test..開頭的測試方法(利用java的反射機制),怎樣自己定義那些方法執行?一種方法我們能夠改變測試方法的名稱,不用test開頭就可以。這樣測試架構就會忽略它。另外一種方法我們能夠自己手工組合我們須要的測試集合,我們能夠通過建立test suite來取得,不論什麼測試類都可以包括一個名為suite的靜态方法:

TestStudent類:

public class TestStudentextends TestCase {

    public TestStudent(String string) {
super(string);
}

protectedvoid setUp() throws Exception {
super.setUp();
}

publicfinal void testQueryOneClass() {
Studentstudent=new Student();
assertNotNull(student.QueryOneClass());
}

publicfinal void testQueryClasss() {
Studentstudent=new Student();
assertNotNull(student.QueryClasss());
}

 public static Test suite(){
 TestSuite suite = new TestSuite();
 suite.addTest(newTestStudent("testQueryOneClass"));
 return suite;
 }
}      

       我們通過suite顯式的說明了我們要執行哪些test方法,并且,通過給構造函數的String參數傳值:讓TestCase傳回一個對命名測試方法的引用。 

      假設要測試兩個類裡的測試方法,我們能夠再寫一個類。寫suite方法,選擇行測試幾個類中的方法。

TestComposite類:

public classTestComposite extends TestCase {

  public TestComposite(String string) {
super(string);
}
 static public Test suite(){
 TestSuite suite = new TestSuite();
 suite.addTestSuite(TestClasss.class);
 suite.addTest(TestStudent.suite());
 return suite;
 }
}      

     這個類會執行TestStudent類中的suite方法指定執行的測試方法,還會執行TestClasss類中存在的符合命名規範的方法。

總結

       JUnit給我們提供了非常多友善的服務,比如:假設測試方法。每個都須要資料庫連接配接。那麼我們豈不是要在代碼裡寫非常多遍?不用操心。JUnit給我們提供了能起到總控的方式。我們須要針對suite做一個setUp和tearDown,須要提供所需的一個suite(不管通過什麼樣的方法)而且把它包裝進一個TestSetup對象,和動态代理的思想非常類似。有興趣的能夠自己查一下,實作起來非常easy。

版權聲明:本文部落客原創文章。部落格,未經同意不得轉載。