像TDD、ATDD、BDD你們都耳熟能詳,而且這些方法學冠予敏捷美名。 javascript
作爲一名敏捷開發的忠實粉,下面我談談對於自身作主程序員在測試方面的一些瞭解。 前端
參考書籍 java
《 測試驅動開發的藝術》、《Junit In Action》、《驗收測試驅動開發 ATDD實例講解》、《Web敏捷開發之道》 程序員
TDD:需求分解、紅->綠->重構循環、編寫恰好完成需求碼。 web
ATDD:在TDD編程技能之上的補充,實現用戶故事,構建正確的軟件而不是正確的構建軟件。 spring
咱們先抄一下書籍上的測試分類,結合實踐經驗,後面用一個web工程示例來解釋咱們如何應用上這些測試。 sql
集成測試 數據庫
對象:測試多個實例化多個、並調用這些對象上的方法 編程
服務:當應用程序部署到一個servlet或者ejb容器時運行測試,應用程序可能連接到一個數據庫或者連接到其餘外部資源 後端
子系統:層次化的應用程序可能會有一個前端處理表示,還有一個後臺業務邏輯。測試能夠驗證一個請求是否從前段傳遞到後端,而且從後端返回正確的響應。
功能測試
應用程序使用了一個框架:框架中的功能測試集中在測試框架API
應用程序有一個GUI:圖形用戶界面的功能測試是爲了驗證全部的特性均可以訪問被訪問並提供預期的結果。測試能夠直接訪問GUI,這也可能會調用其餘的組件或後端程序。
應用程序由子系統構成:層次系統圖按角色的不一樣來劃分子系統。可能有其餘表示子系統、業務邏輯子系統的數據子系統。層次化帶來了靈活性,而且能夠經過幾個不一樣的前端來訪問後端。每一層都會爲其餘層定義一個API來使用。功能測試主要是測試該層的API是否實現。
壓力、性能測試
好理解,測試吞吐量、測試性能瓶頸。
驗收測試
其餘測試全部的超集。最終級別的測試,一般從功能測試開始、由客戶或客戶代理人進行。
程序員開發測試子集,方法有比較多。
單元測試
邏輯單元測試、集成單元測試、功能單元測試。一般要快速執行,不依賴與環境。
測試介紹:
一個web工程。
咱們進行應用分紅
domain層領域對象。執行領域邏輯。
application層應用接口,facade接口、提供事務寫操做、組織領域對象邏輯。依賴domain層
querychannel層查詢通道接口,提供數據庫查詢、搜索引擎查詢接口。不依賴領域層
(application層與querychannel層分離實現CQRS)
web層,UI、控制web請求,組織application、querychannel調用並依賴他們。
infrastructure層基礎設施,網絡服務、數據庫服務對application的repository跟querychannel相關實現等。
單元測試:
重中之重,大部分測試在單元測試中。
工具:Junit、EasyMock、sprint-test、struts-test、jasmine
domain層:New出領域對象,測試相關邏輯方面。Repository、DomainService等使用mock實現。驗證相關領域對象操做方向後數據。
application層:組織Command對象,mock相關Repository操做,驗證調用邏輯。
querychanel層:組織Condition對象,mock相關DataSource操做,驗證sql組織,返回Dto對象數據。
web層:springMVC使用MockMvc測試Controller邏輯。struts使用StrutsTestCase測試action邏輯。
jasmine測試javascript相關邏輯
infrastructure層:測試工具方法、服務異常狀況處理。不進行訪問數據庫等這些測試。
集成測試:
工具:dbunit、連接測試數據庫spring-test使用事務回滾操做測試、連接測試cache服務器
application層、querychannel層、infrastruct層,在集成以上測試環境下,真實的調用數據庫、cache服務器等這些操做。
功能測試:
工具:jwebunit、selenium
web層:運行模擬容器。使用jwebunit、selenium等進行模擬web操做的一個功能點。例如:登陸。
壓力測試:jmeter
web層,配置訪問http腳本、併發線程數據、用戶數、持續時間。
驗收測試:(這裏指程序員的測試子集)
工具:Fitnesse、selenium
web層:在fitnesse的wiki配置測試集(整合一個或多個功能測試)、準備相關數據表格。完成一個用戶故事。例如:下單->支付->收貨->確認收貨的一個購物流程。
在工做實踐,有很多測試難以編寫,咱們學會用強大工具配合,並編寫可測代碼。讓編寫測試成爲一種樂趣。