産品特色
編輯推薦
JUnit是領先的Java單元測試框架,它的4.8版本在很大的程度上改善瞭Java的開發流程。
為瞭提高測試效率,JUnit針對新的應用程序類型(比如Ajax和基於HTML的錶示層)以及應用程序框架(比如EJB和OSGi)進行瞭擴展。
《JUnit實戰(第2版)》經過徹底的修訂,是目前針對Java應用程序進行單元測試的全新指南。它提供瞭各種解決實際問題的技術,例如,使用mocks進行隔離測試、為JavaEE和數據庫應用程序進行容器內測試以及測試自動化。《JUnit實戰(第2版)》采用瞭實例驅動的編寫風格,並涵蓋瞭JUnit4.8的新功能,比如簡化測試編寫的新注釋、改進的異常處理以及新的斷言方法。此外,你還會學到如何將JUnit與其他重要的開源框架、工具進行集成。
《JUnit實戰(第2版)》介紹瞭:單元測試,將JUnit與TDD、BDD、持續集成以及其他zuijia實踐進行整閤,數據庫和Web應用程序的單元測試。
內容簡介
《JUnit實戰(第2版)》從認識JUnit、不同的測試策略、JUnit與構建過程、JUnit擴展4個方麵,由淺入深、由易到難地對JUnit展開瞭係統的講解,包括探索JUnit的核心、軟件測試原則、測試覆蓋率與開發、使用stub進行粗粒度測試、使用mock objects進行測試、容器內測試、從Ant中運行JUnit測試、從Maven2中運行JUnit測試、持續集成工具、錶示層的測試、Ajax測試、使用Cactus進行服務器端的Java測試、測試JSF應用程序、測試OSGi組件、測試數據庫訪問、測試基於JPA的應用程序、JUnit的其他用法等內容。
《JUnit實戰(第2版)》不僅僅介紹瞭使用JUnit框架測試項目必須掌握的核心概念,還指導讀者如何使用JUnit框架編寫自己的測試用例,並針對在編寫代碼的過程中如何使得代碼可測試給齣建議。本書還介紹瞭基礎的軟件開發原則,如測試驅動開發(TDD)等,以便指導用戶如何使用不同的工具來測試典型Java EE應用程序的每一層。此外,本書也提供瞭幾個附錄,以幫助讀者快速轉換到zui新版本的JUnit,並且能夠輕鬆地集成自己喜歡的IDE。
本書適閤於已具有一定Java編程基礎的讀者,以及在Java平颱下進行各類軟件開發的開發人員、測試人員。對於單元測試學習者和編程愛好者來說,本書則具有極高的學習參考價值。
作者簡介
Petar Tahchiey,曾是HP的軟件工程師,也是Jakarta Cactus項目的核心開發人員。
Felipe Leme,是JCP成員,也是DbUnit和Cactus的貢獻者。
Gary Gregory,是一位具有20多年經驗的Java開發者,他目前在為遺留集成開發應用服務器。
Vincent Massol,是《JUnit實戰(第1版)》的作者。
內頁插圖
精彩書評
“本書不僅針對JUn.1、而且還針對常用的單元測試給齣瞭quan威的指導。”
——Tyson S.Maxwell,Raytheon公司
“我嚮所有認真對待JUnit測試的人推薦這本書。”
——Robert Hanson
《GW Tin Action》作者“為單元測試打下一個穩固的基礎,尤其是以Ant/Maven和Eclipse進行的單元測試。”
——Doug Warren
Java Web Services公司“本書展示瞭如何想盡一切辦法來進行測試。”
——John Griffin《Hibernate Search in Action》作者之一
目錄
第1部分 認識JUnit
第1章 JUnit起步
1.1 證實它能運行
1.2 從零開始
1.3 理解單元測試框架
1.4 JUnit的設計目標
1.5 安裝JUnit
1.6 使用JUnit測試
1.7 小結
第2章 探索JUnit的核心
2.1 探索JUnit核心
2.2 運行參數化測試
2.3 JUnit的測試運行器
2.3.1 測試運行器簡介
2.3.2 JUnitCore fa?ade
2.3.3 自定義測試運行器
2.4 用Suite來組閤測試
2.4.1 組閤一組測試類
2.4.2 組閤一組測試集
2.4.3 Suite、IDE、Ant與Maven
2.5 小結
第3章 掌握JUnit
3.1 引入controller組件
3.1.1 設計接口
3.1.2 實現基類
3.2 讓我們來測試它
3.2.1 測試DefaultController
3.2.2 添加一個處理器
3.2.3 請求處理
3.2.4 改進testProcessRequest
3.3 測試異常處理
3.3.1 模擬異常條件
3.3.2 測試異常
3.4 超時測試
3.5 引入Hamcrest匹配器
3.6 創建測試項目
3.7 小結
第4章 軟件測試原則
4.1 單元測試的必要性
4.1.1 帶來更高的測試覆蓋率
4.1.2 提高團隊效率
4.1.3 監測衰退和減少調試
4.1.4 自信地重構
4.1.5 改進實現
4.1.6 將預期的行為文檔化
4.1.7 啓用代碼覆蓋率以及其他指標
4.2 測試類型
4.2.1 軟件測試的4種類型
4.2.2 單元測試的3種類型
4.3 黑盒測試與白盒測試
4.4 小結
第2部分 不同的測試策略
第5章 測試覆蓋率與開發
5.1 測量測試覆蓋率
5.1.1 測試覆蓋率簡介
5.1.2 Cobertura簡介
5.1.3 生成測試覆蓋率報告
5.1.4 結閤黑盒與白盒測試
5.2 編寫可測試的代碼
5.2.1 公共API是協議
5.2.2 減少依賴關係
5.2.3 創建簡單的構造函數
5.2.4 遵循最少知識原則
5.2.5 避免隱藏的依賴關係與全局狀態
5.2.6 單態模式的優點和缺點
5.2.7 優先使用通用方法
5.2.8 組閤優先於繼承
5.2.9 多態優先於條件語句
5.3 測試驅動開發
5.3.1 調整開發周期
5.3.2 TDD的兩個步驟
5.4 在開發周期中的測試
5.5 小結
第6章 使用stub進行粗粒度測試
6.1 stub簡介
6.2 使用stub測試一個HTTP連接
6.2.1 選擇使用stub的方案
6.2.2 使用Jetty作為嵌入式服務器
6.3 使用stub替換Web服務器資源
6.3.1 建立第一個stub測試
6.3.2 針對故障情況進行測試
6.3.3 迴顧第一個stub測試
6.4 替換連接
6.4.1 創建自定義的URL協議處理器
6.4.2 創建一個JDK的HttpURLConnection stub
6.4.3 運行測試
6.5 小結
第7章 使用mock objects進行測試
7.1 mock objects簡介
7.2 使用mock objects進行單元測試
7.3 使用mock objects來重構
7.3.1 重構示例
7.4 替換一個HTTP連接
7.4.1 定義mock objects
7.4.2 測試一個簡單的方法
7.4.3 第一次嘗試:簡單的方法重構技巧
7.4.4 第二個嘗試:使用類工廠來重構
7.5 把mocks用作特洛伊木馬
7.6 介紹mock框架
7.6.1 使用EasyMock
7.6.2 使用JMock
7.7 小結
第8章 容器內測試
8.1 標準單元測試的局限性
8.2 mock objects解決方案
8.3 容器內測試
8.3.1 實現策略
8.3.2 容器內測試框架
8.4 比較stub、mock objects和容器內測試
8.4.1 stub的優點與缺點
8.4.2 mock objects的優點和缺點
8.4.3 容器內測試的優點與缺點
8.4.4 容器內測試與容器外測試
8.5 小結
第3部分 JUnit與構建過程
第9章 從Ant中運行JUnit測試
9.1 生命中的一天
9.2 從Ant中運行測試
9.3 認識並安裝Ant
9.4 Ant的目標、項目、屬性以及任務
9.4.1 javac任務
9.4.2 JUnit任務
9.5 讓Ant來執行任務
9.6 使用Ivy進行依賴管理
9.7 創建HTML報告
9.8 批處理測試
9.9 小結
第10章 從Maven2中運行JUnit測試
10.1 Maven的功能
10.1.1 約定優於配置
10.1.2 強大的依賴管理
10.1.3 Maven的構建生命周期
10.1.4 基於插件的架構
10.1.5 Maven項目對象模型
10.2 建立一個Maven項目
10.3 Maven插件的引入
10.3.1 Maven的Compiler插件
10.3.2 Maven的Surefire插件
10.3.3 使用Maven生成HTML格式的JUnit報告
10.4 Maven的不足
10.5 小結
第11章 持續集成工具
11.1 嘗試持續集成
11.1.1 持續集成測試
11.2 拯救用戶的CruiseControl
11.2.1 開始使用CruiseControl
11.2.2 創建一個示例項目
11.2.3 解析CruiseControl配置文件
11.3 另一個持續集成工具--Hudson
11.3.1 Hudson簡介
11.3.2 安裝
11.3.3 配置Hudson
11.3.4 配置Hudson中的項目
11.4 持續集成的優勢
11.5 小結
第4部分 JUnit擴展
第12章 錶示層的測試
12.1 選擇測試框架
12.2 HtmlUnit簡介
12.2.1 一個實例
12.3 編寫HtmlUnit測試
12.3.1 HTML斷言
12.3.2 對特定的Web瀏覽器進行測試
12.3.3 測試多個Web瀏覽器
12.3.4 創建獨立的測試
12.3.5 導航對象模型
12.3.6 通過特定的元素類型訪問元素
12.3.7 通過名字與索引訪問元素
12.3.8 通過引用訪問元素
12.3.9 使用XPath
12.3.10 測試失敗和異常
12.3.11 應用程序與網絡導航
12.3.12 使用HtmlUnit測試錶單
12.3.13 測試框架(frame)
12.3.14 測試JavaScript
12.3.15 測試CSS
12.3.16 SSL錯誤
12.4 集成HtmlUnit和Cactus
12.4.1 在Cactus中編寫測試
12.5 Selenium簡介
12.6 生成Selenium測試
12.6.1 一個實例
12.7 運行Selenium測試
12.7.1 管理Selenium服務器
12.7.2 使用JUnit 4運行Selenium測試
12.8 編寫Selenium測試
12.8.1 針對特定的Web瀏覽器進行測試
12.8.2 測試多個瀏覽器
12.8.3 應用程序和網絡導航
12.8.4 通過引用訪問元素
12.8.5 通過異常使測試失敗
12.8.6 使用Selenium測試錶單
12.8.7 測試JavaScript告警
12.8.8 捕獲一個JUnit 3測試失敗的截屏
12.8.9 捕獲一個JUnit 4測試失敗的截屏
12.9 HtmlUnit與Selenium
12.10 小結
第13章 Ajax測試
13.1 Ajax應用程序難以測試的原因
13.1.1 傳統的Web交互
13.1.2 Ajax交互
13.1.3 一個嶄新的世界
13.1.4 測試的挑戰
13.2 Ajax的測試模式
13.2.1 功能測試
13.2.2 客戶端腳本單元測試
13.2.3 服務測試
13.3 功能測試
13.3.1 使用Seleniun進行功能測試
13.3.2 使用HtmlUnit進行功能測試
13.4 JavaScript測試
13.4.1 使用RhinoUnit測試JavaScript
13.4.2 使用JsUnit測試JavaScript
13.4.3 編寫JsUnit測試用例
13.4.4 編寫JsUnit測試集
13.4.5 手動運行JsUnit測試用例
13.4.6 使用Ant自動運行JsUnit測試用例
13.5 RhinoUnit與JsUnit
13.6 使用JSLint檢驗最佳實踐
13.7 使用HttpClient測試服務
13.7.1 調用XML服務
13.7.2 驗證XML響應
13.7.3 驗證JSON響應
13.8 測試Google Web工具箱應用程序
13.8.1 為GWT應用程序選擇測試框架
13.8.2 手動創建GWTTestCase
13.8.3 使用junitCreator創建GWTTestCase
13.8.4 運行測試用例
13.8.5 安裝和拆卸測試
13.8.6 創建測試集
13.8.7 運行測試集
13.9 小結
第14章 使用Cactus進行服務器端的Java測試
14.1 什麼是Cactus?
14.2 使用Cactus進行測試
14.2.1 你可以使用Cactus測試的Java組件
14.2.2 一般原則
14.2.3 Cactus如何工作
14.3 測試servlet和filters
14.3.1 介紹管理應用程序
14.3.2 使用Cactus編寫servlet測試
14.4 測試JSP
14.4.1 迴顧管理應用程序
14.4.2 什麼是JSP單元測試?
14.4.3 單獨使用Cactus對JSP進行單元測試
14.4.4 利用SQL結果數據執行JSP
14.5 測試EJB
14.6 什麼是Cargo?
14.7 使用Ant執行Cactus測試
14.7.1 用來準備文件的Cactus
14.8 使用Maven2x執行Cactus測試
14.8.1 Maven2 cactifywar MOJO
14.8.2 Maven2 cactifyear MOJO
14.9 從瀏覽器執行Cactus測試
14.10 小結
第15章 測試JSF應用程序
15.1 引入JSF
15.2 介紹示例應用程序
15.3 測試JSF應用程序時的典型問題
15.4 測試JSF應用程序的策略
15.4.1 黑盒方法
15.4.2 Mock object援救
15.5 使用JSUnit測試示例應用程序
15.5.1 從瀏覽器執行一個JSFUnit測試
15.5.2 使用JSFUnit測試Ajax
15.6 使用HtmlUnit與JSFUnit
15.7 JSF應用程序的性能測試
15.8 小結
第16章 測試OSGi組件
16.1 OSGi簡介
16.2 第一個OSGi服務
16.2.1 示例應用程序
16.3 測試OSGi服務
16.3.1 Mock objects
16.4 引入JUnit4OSGi
16.5 小結
第17章 測試數據庫訪問
17.1 數據庫單元測試的阻抗不匹配
17.1.1 單元測試必須執行隔離的代碼
17.1.2 單元測試必須易於編寫和運行
17.1.3 單元測試必須運行快速
17.2 DbUnit介紹
17.2.1 示例應用程序
17.2.2 設置DbUnit並運行示例應用程序
17.3 使用數據集來填充數據庫
17.3.1 剖析DatabaseOperation
17.4 用數據集斷言數據庫狀態
17.4.1 過濾數據集
17.4.2 忽略數據列
17.5 使用ReplacementDataSet轉換數據
17.5.1 使用ReplacementDataSet處理不同的ID問題
17.5.2 處理NULL值
17.6 從已有的數據庫數據中創建數據集
17.7 高級技術
17.7.1 DbUnit與模闆設計模式
17.7.2 通過自定義注釋提高重用
17.7.3 在數據集中使用錶達式語言
17.8 數據庫訪問測試的最佳做法
17.8.1 每個開發者使用一個數據庫
17.8.2 確保目標數據庫被測試
17.8.3 為加載和存儲數據創建互補測試
17.8.4 編寫加載測試用例時,應涵蓋所有基本場景
17.8.5 計劃數據集的使用
17.8.6 測試清理
17.9 小結
第18章 測試基於JPA的應用程序
18.1 測試多層應用程序
18.1.1 示例應用程序
18.1.2 多層、多種測試策略
18.2 JPA測試的方方麵麵
18.3 準備基礎設施
18.4 測試JPA實體映射
18.4.1 使用JPA ID生成器集成測試用例
18.5 測試基於JPA的DAO
18.6 測試外鍵名字
18.7 小結
第19章 JUnit的其他用法
19.1 介紹
19.1.1 工具概述
19.1.2 運行示例
19.2 透明地使用mock
19.2.1 Unitils的Easy Mock支持
19.2.2 FEST-Mocks
19.2.3 Mycila
19.3 DbUnit集成
19.4 使斷言更簡單
19.4.1 JUnit-addons斷言包
19.4.2 Unitlis的ReflectionAssert
JUnit實戰(第2版) [JUnit in Action Second Edition] 下載 mobi epub pdf txt 電子書