天天看點

Seam的內建測試

版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/2188489

Seam的內建測試

http://jacktom.javaeye.com/

Seam的內建測試

Integration Testing

內建測試和單元測試一起使用。它應該測試單元的整合。實際上,大多數內建測試模拟用戶端調用,是以,你可以有一個完整的功能測試,從表現層到業務邏輯層,再到持久層。

這些測試非常有用,能更深入開發,調整後端系統。它立即讓你明白是否你在業務層所做的改變将影響Web頁面中斷。當然,這取決于你是否及時更新測試,一旦你更新了JSF頁面,也應該對測試做相應更改。

要執行內建測試,應該使用TestNG和Seam基礎類的組合來模拟Faces請求。此例還使用早先的單元測試的例子。內建測試運作來增加一個房子。

Java代碼

http://seam.group.javaeye.com/group/blog/172767#
  1. public class HouseTest extends SeamTest{   
  2.     @Test  
  3.     public void testAddHouse() throws Exception{   
  4.         new FacesRequest(){   
  5.             @Override  
  6.             protected void processValidations() throws Exception {   
  7.                 validateValue("#{house.address}", "123 Main Street");   
  8.                 validateValue("#{house.city}", "Columbus");   
  9.                 validateValue("#{house.state}", "OH");   
  10.                 assert !isValidationFailure();   
  11.             }   
  12.             protected void updateModelValues() throws Exception {   
  13.                 setValue("#{house.address}", "123 Main Street");   
  14.                 setValue("#{house.city}", "Columbus");   
  15.                 setValue("#{house.state}", "OH");   
  16.             protected void invokeApplication() {   
  17.                 assert invokeMethod("#{salesManager.addHouse}").equals("success");   
  18.             protected void renderResponse() {   
  19.                 assert getValue("#{house.address}").equals("123 Main Street");   
  20.                 assert getValue("#{house.city}").equals("Columbus");   
  21.                 assert getValue("#{house.state}").equals("OH");   
  22.         }.run();   
  23.     }   
  24. }  

第一件事是繼承SeamTest,SeamTest類是Seam核心類的一部分。繼承此類後,就可以使用兩個核心操作建立一個請求。你可以使用超類來建立一個FacesRequest或者NonFacesRequest。這兩個類是SeamTest對象的内部類,我們會建立類的實作通過重寫方法調用。每個方法調用代表了JSF生命周期的一部分。可以攔截此方式,測試請求的各個部份。方法:

getViewId() JSF視圖ID或非Faces請求的頁面名

applyRequestValues() 應用請求值階段定義JSF群組件頁面的互動

processValidations() 處理驗證階段的方法

updateModelValues() 更新模型值階段的方法

invokeApplication() 用于方法調用期間和重寫方法

renderResponse() 呈現響應期間出現

你可以選擇要覆寫的方法。在例子中,我們驗證和設定值傳遞到業務層,在House對象設定值,驗證項,然後提供House對象到資料庫。

從長遠看,測試能節省寶貴的時間。它幫助識别錯誤和應用程式異常行為,尤其是在大項目中,測試占了相當大比例的時間。