第一次海報和TDD採用者。 :-)我會有點冗長,所以請耐心等待。Webservices的端到端測試
我最近開始使用Apache CXF框架Spring和Commons Chain開發基於SOAP的Web服務來實現業務流。我在這裏面臨的問題是測試Web服務 - 像單元測試和功能測試一樣進行測試。
我在單元測試中的第一次嘗試是完全失敗。爲了保持單元測試的靈活性,我使用了一個Spring XML文件來保存測試數據。另外,我沒有創建要測試的「組件」實例,而是從我的Spring應用程序上下文中檢索它們。包含數據的XML文件很快就失控了;用XML創建對象圖變成了一場噩夢。由於要測試的「組件」是從Spring應用程序上下文中選取的,因此每個測試運行都會加載我應用程序中涉及的組件,使用的DAO對象等。此外,與單元測試案例集中或專注於測試組件,單元測試開始觸及數據庫,與郵件服務器進行通信等。糟糕,非常糟糕。
我知道我做錯了什麼,並開始想辦法糾正它。根據本主板的其中一篇帖子的建議,我查閱了Java嘲笑框架Mockito,以便我可以不使用真正的DAO類和郵件服務器,只是模擬功能。由於單元測試有點受到控制,這引起了我的第二個問題;對數據的依賴。我一直在開發的Web服務幾乎沒有邏輯,但對數據依賴性很強。作爲一個例子,考慮我的組件之一:
public class PaymentScheduleRetrievalComponent implements Command {
public boolean execute(Context ctx) {
Policy policy = (Policy)ctx.get("POLICY");
List<PaymentSchedule> list = billingDAO.getPaymentStatementForPolicy(policy);
ctx.put("PAYMENT_SCHEDULE_LIST", list);
return false;
}
}
大多數我的組件都遵循同樣的路線 - 從上下文選擇一個域對象,打DAO [我們正在使用iBATIS的SQL映射在這裏]並檢索結果。
所以,現在的問題:
- 如何在DAO類ESP測試時,一個插入或更新用可能會留下一個「不穩定」狀態的數據庫[在情況下,假設3插入到不同的表實際上形成一個單一交易]?
- 功能測試Web服務的事實標準是什麼,它圍繞着大量數據移動,即從數據存儲區無意識插入/檢索?
您的個人經驗/評論將不勝感激。請讓我知道,以防我在解釋手邊的問題時遺漏了一些細節。
-sasuke
使用JaxWsServerFactoryBean的簡單Junit規則:https:/ /github.com/skjolber/mockito-soap-cxf – ThomasRS 2016-11-24 12:56:01