使用JUnit高效完成功能測試(2)

發表于:2015-07-02來源:uml.org.cn作者:不詳點擊數: 標簽:junit
public void testXSLTransformation() { /* initialize the variables (or do this in setUp if used in many tests) */ String processMePath = /path/to/file.xml; String stylesheetPath = /path/to/stylesheet.x

  

public void testXSLTransformation() {

  /* initialize the variables

  (or do this in setUp if used in many tests) */

  String processMePath = "/path/to/file.xml";

  String stylesheetPath = "/path/to/stylesheet.xsl";

  String outputFilePath = "/path/to/output.xml";

  //do the work

  Transform.main(new String[] {

  processMePath,

  stylesheetPath,

  "-o", outputFilePath } );

  //check the work

  assertTrue(checkOutputFile(outputFilePath));

  }

  每一步都可以根據需要進行增減。這里聲明的變量也可以簡單地通過調用方法來賦值。預期輸出的實現是由幾個步驟組成。如果成功得到預期輸出,有時可以省略檢查步驟。

  雖然這個模式簡單且靈活可變,但是第二步必不可少。這個模板沒有告訴我們尋找要測試代碼的方法,也不能保證代碼以方便測試的方式運行。這是個需要認真考慮的問題。

  功能測試

  通過確定執行程序功能的主要代碼段,可以將測試建立在一個更有效的環境下。由于這些類提供了從系統外部進行測試的途徑,所以也是代碼的入口點。

  因此,功能測試的整體目標就是確定一組可以訪問系統功能的高層接口類。這些類的獨立性越高越好。畢竟,如果能將類從環境中分離出來,測試起來會更加容易。

  確定作為入口點的代碼是一個簡單的過程。在代碼庫中,通常有幾個控制該庫所有功能的入口點。這些外部類作為客戶端代碼,與庫的中介對象將開發人員從復雜的代碼分析中解脫出來。這些便是應當首先對其方法進行測試的類。

  比如,Saxon有一小組類作為邏輯入口點提供對庫的訪問。通過對外部類進行編碼操作,比如轉換、設置和查詢,客戶端代碼可以訪問庫的許多功能類,而無需考慮類的接口問題,甚至無需擔心這些類是否存在。這些外部類用高層易用的接口提供一個簡單的方式對系統功能進行測試,這正是一個優良的庫的特征。

  程序代碼中的各個功能模塊通常是各自獨立的。在某些代碼中,甚至可以認為這些模塊各自對應不同的、可通過大量外部類訪問的庫。這些類查找高層接口的邏輯位置。插件結構通常都采用這種設計模式:每個插件程序都有一個可以有效執行內部代碼全部功能的簡單接口。

  在一些非嚴格描述的系統中,通常有一個所有程序行為的中介點。在MVC架構中,這個中介類一般作為“控制器”,負責配置系統各部分的請求路由。整體系統的功能主要由這個控制器連接的類實現,因此,這些類是測試的主要對象。

  比如在 Applet程序設計中,java.applet.Applet的派生類就是所有代碼的中心處理單元。根據代碼的分解程度,測試焦點可以放在Applet 子類或與其連接的類上。

  連接各個模塊的代碼也是測試的主要對象。將應用程序請求轉換為數據庫查詢的類,以及有相似功能的適配類是其次應該考慮的測試對象。

  各種基于MVC(模式-視圖-控制器)架構的組件可以用其它的測試框架(比如Junit的擴展)進行測試。例如,Struts的 action類就最好使用JUnit的擴展StrutsTestCase進行測試;服務器端的組件(如Servlets、JSP和EJB)最好用 Catus進行測試;而HttpUnit則是對Web應用程序進行黑盒測試的最好框架。本文討論的所有技術都可應用于這些框架環境下的測試。

  從用例到測試用例

  每個入口點都必須與相應的用例匹配。某些情況下可以忽視這一步,因為類名的自記錄可以實現自動匹配,比如 Saxon中的轉換類可以實現XSL轉換,查詢類可以進行XQuery轉換。

  其它情況則要復雜得多。通常用例描述的功能只能以橫切關注點的方式存在,不能用任何單獨的類進行例證。只有幾組類交互時或滿足一定條件時,才能觀察到功能行為。這種情況下,測試的初始化程序會比較長,或者可以用 setUp()方法提供需要的測試環境。

  而調用代碼的運行程序應該盡可能地設計成一行,以減少與被測試代碼的關聯,這可以有效避免對邊緣效應與不穩定實現細節的依賴。測試的檢查階段是最復雜的,因為這個階段經常需要添寫非測試用代碼。測試時可能需要對結果進行嚴格的分析以確保其符合要求。有時甚至需要將這個過程分為幾步來完成,以取得測試可以識別的結果。在XSL轉換中,這兩種情況都是可能的,結果儲存在文件中,然后以XML格式讀入內存并進行準確性分析。

原文轉自:http://www.uml.org.cn/Test/20111142.asp

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97