JAVA測試模式
測試模式是一種針對 軟件測試 領域的某種高頻率出現問題而采取并經過實踐證明行之有效的專門化、高效的解決途徑(方法),它在軟件理論和實踐兩者之間起著“橋梁”的作用。在 面向對象 語言 JAVA 程序測試的過程中,一個較為棘手的問題就是JAVA類的可視性問題
測試模式是一種針對
軟件測試領域的某種高頻率出現問題而采取并經過實踐證明行之有效的專門化、高效的解決途徑(方法),它在軟件理論和實踐兩者之間起著“橋梁”的作用。在
面向對象語言
JAVA程序測試的過程中,一個較為棘手的問題就是JAVA類的可視性問題?!靶畔㈦[蔽”固然是面向對象語言設計的一個突出的優點,但是同時也給測試帶來諸多不便,有關“隱蔽信息”的可測試性成為這類測試的一大突出結癥。為此我們針對JAVA類不同的“可視性”要求的場合,采取相應的測試模式來支撐相關JAVA類(包)的測試。本文主要總結五個常用的JAVA測試模式,以饗讀者。這五個模式同樣適合于其它面向對象類(包)的測試,只不過在具體細節上要考慮與JAVA語言信息隱蔽性的差異。比如:JAVA的可視性以包為界,同一個包內的類對其他類具有相同的存取權限。而C++則以類為界,只有子類和友員函數方可對基類的隱蔽信息進行存取。 我們在下面以圖表的方式給出五個常用JAVA測試模式詳細描述,有關模式的描述類目分別是模式名稱、測試對象、針對問題、約束條件、解決方法、實例、約束解決方式和該測試的設計原理。
模式(一)Main模式
模式名稱
Main
測試對象
JAVA類
針對問題
測試人員不知道在何處編寫驅動和初始化被測試類的測試代碼
約束
測試必須容易運行、測試代碼能夠訪問該類所有的特征(所有的屬性和方法)
解決方法
將測試代碼放入類的publicstaticvoidmain(String[]args)方法中去
實例
publicstaticvoidmain(String[]args){
SomeClassresult;
//performthetest…
System.out.print(“resultis..”);
}
約束解決
該測試代碼能夠率先被激活和執行、并能夠訪問被測試類所有的特征
設計原理
JAVA類可以擁有publicstaticvoidmain(String[]args)方法,它是類在JVM中被率先執行的方法,控制著整個類的執行邏輯,main方法能夠訪問所在類的所有屬性和方法
模式(二)toString模式
模式名稱
toString
測試對象
作為運算結果的類
針對問題
測試人員不知道如何檢驗一個運算對象的中間結果和最終結果
約束
測試結果代表對象內部的一個狀態,而該狀態必須能夠被測試
解決方法
通過使用toString方法來對類狀態進行描述,描述結果可以通過打印與預期結果進行比較
實例
classSomeClass{
//…
publicStringtoString(){
//customrepresentation
}
}
約束解決
類的內部狀態通過字符串來進行表示因而得以解決
設計原理
在基類定義的toString()方法能夠提供特定對象的狀態的描述,通過將對象狀態描述進行打印和顯示來判定對象狀態是否與預期相符
模式(三)Equal模式
模式名稱
Equal
測試對象
JAVA類
針對問題
作為運算結果的類
約束
測試人員不知道如何檢驗一個運算對象的中間結果和最終結果
解決方法
定義equals方法比較實際結果與預期結果進行比較
實例
classSomeClass{
//…
publicbooleanequals(Objecto){
//customcomparison
}
}
約束解決
保持某個狀態的對象需要與預期對象進行比較,通過比較后的布爾值來確定是否與預期結果相符合
設計原理
在基類定義的publicbooleanequals(Object)能夠對比對象間的差異并以布爾值形式返回比較結果
模式(四)InternalTesterClass模式
模式名稱
InternalTesterClass
測試對象
JAVA包
針對問題
測試人員不知在何處編寫測試代碼測試包中的類
約束
測試代碼與運行代碼必須分開來,測試代碼能夠訪問到類的所有特性,測試代碼起到的是一個包的客戶端的角色。
解決方法
新建一個類并將該類的包路徑與被測試類的包路徑相同,然后在該類里寫入所有的測試代碼
實例
packagetheOne;
publi
clearcase/" target="_blank" >cclassInternalTestClass{
//…
}
約束解決
所有的測試代碼均與運行代碼分離,由于它與運行代碼在同一包路徑下,所以它與普通的客戶端相比具有更多的可視性
設計原理
將測試代碼定義在一個特定的類中。由于測試類與運行類在同一個包路徑下,因此它能訪問測試類的類的所有特性。因此,它遠比客戶端測試具有更大的可視性。
模式(五)ExternTesterClass模式
模式名稱
ExternTesterClass模式
測試對象
JAVA包
針對問題
測試人員不知在何處編寫測試代碼測試包中的類
約束
測試代碼與運行代碼必須分開來,測試代碼能夠訪問到類的可視特征,測試代碼起到的是一個包的客戶端的角色。
解決方法
新建一個類,指定與被測試類不同的包路徑,然后在該類里寫入所有的測試代碼
實例
packageanotherOne;
publicclassExternalTestClass{
//…
}
約束解決
所有的測試代碼均與運行代碼分離,由于它與運行代碼在不同的包路徑下,所以它與普通的客戶端的可視性相同
設計原理
將測試代碼定義在一個特定的類中。由于測試類與運行類不在同一個包路徑下,因此它不能訪問測試類的所有屬性和方法。但是它與客戶端具有相同的可視性。因此,它可以替代客戶端進行測試。
上面五個模式的作用關系如圖-1所示:
圖-1JAVA測試模式圖解
了解上述所述的模式有助于測試人員在具體JAVA代碼測試中編寫測試類,同時上述的這些JAVA測試模式還可以借助JUnit這樣的
測試框架來實現。
原文轉自:http://www.anti-gravitydesign.com