版權聲明:本文為部落客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#- public class HouseTest extends SeamTest{
- @Test
- public void testAddHouse() throws Exception{
- new FacesRequest(){
- @Override
- protected void processValidations() throws Exception {
- validateValue("#{house.address}", "123 Main Street");
- validateValue("#{house.city}", "Columbus");
- validateValue("#{house.state}", "OH");
- assert !isValidationFailure();
- }
- protected void updateModelValues() throws Exception {
- setValue("#{house.address}", "123 Main Street");
- setValue("#{house.city}", "Columbus");
- setValue("#{house.state}", "OH");
- protected void invokeApplication() {
- assert invokeMethod("#{salesManager.addHouse}").equals("success");
- protected void renderResponse() {
- assert getValue("#{house.address}").equals("123 Main Street");
- assert getValue("#{house.city}").equals("Columbus");
- assert getValue("#{house.state}").equals("OH");
- }.run();
- }
- }
第一件事是繼承SeamTest,SeamTest類是Seam核心類的一部分。繼承此類後,就可以使用兩個核心操作建立一個請求。你可以使用超類來建立一個FacesRequest或者NonFacesRequest。這兩個類是SeamTest對象的内部類,我們會建立類的實作通過重寫方法調用。每個方法調用代表了JSF生命周期的一部分。可以攔截此方式,測試請求的各個部份。方法:
getViewId() JSF視圖ID或非Faces請求的頁面名
applyRequestValues() 應用請求值階段定義JSF群組件頁面的互動
processValidations() 處理驗證階段的方法
updateModelValues() 更新模型值階段的方法
invokeApplication() 用于方法調用期間和重寫方法
renderResponse() 呈現響應期間出現
你可以選擇要覆寫的方法。在例子中,我們驗證和設定值傳遞到業務層,在House對象設定值,驗證項,然後提供House對象到資料庫。
從長遠看,測試能節省寶貴的時間。它幫助識别錯誤和應用程式異常行為,尤其是在大項目中,測試占了相當大比例的時間。