在信息技術中,單元測試是檢驗代碼原子構成的實踐,越小的原子構成,越好的進行檢測。OOP中的一個單元,通常指一個類至少需要一個測試檢查每個類的公共方法。然而,在實踐中什么是一個測試?一個測試是一個單獨的函數,執行一個單獨的動作并檢查執行的動作提供期待的結果。如果結果正確,測試通過;否則測試失敗。通過單元測試,開發者的工作會更輕松,因為當一個 bug 并非自愿的在不斷改動中被添加到代碼,很可能一個已經編寫的測試會失敗可以指出一定精確程度的出錯位置。當代碼需要廣泛的測試時(一個代碼覆蓋率的概念),可以進行這項工作。當遇到一個錯誤,并且沒有測試失敗,最好是編寫一個新的測試準確的重現相同的錯誤。通過這個方式,會很容易檢查,以使在隨后的改動中這個故障不會再次偶然出現。
許多開發者認為單元測試浪費時間。可能因為他們沒有考慮一個良好的測試基礎會對他們的項目有多么積極的影響。有一個好的代碼覆蓋率意味著代碼的改動可以更有信心,因為如果一些危險的東西被觸及,測試會失敗幫助你解決這個問題。另一個測試的好處是他們為想要使用這個經過測試的庫的開發者提供了真實的例子;測試中的代碼非常易讀,因為它是為了自身的性質,并提供了一種在線的文檔。一個積極的作用是,一個曾經編寫測試的開發者更關注編寫具有較少的依賴性的代碼,而且更獨立于上下文環境:因為測試依賴過多的類的確很痛苦。
單元測試的概念并沒有明確的結合到一個技術實現,而且潛在地一個單元測試也可以是一組手寫在一張紙條上的說明;使測試真正有效的是,當他們被集中在一個自動化的背景中。
測試聚集于一個處理單元,一次性執行它們所有的測試,報告測試運行的數量,并報告測試失敗的適量和它們的名字。自動處理被重復多次,在開發中可以幫助定位 bug , 這也是為什么測試經常用來優化性能。開發者往往在它們執行的太慢或者使他們工作太辛苦時放棄測試。
單獨的測試也在執行的上下文中,每個測試必須獨立于其它的,必須不依賴于某個特定的配置。如果測試互相連接,一個錯誤可能破壞整個測試鏈,使得 bug 更加難以發現。環境不應該影響測試,因為這是危險的,測試可能被移走,應用到另外一個機器上,所以應該有最小的配置依賴。
有些地方不是那么容易適合單元測試,通常 UI 和數據庫。因為第一種情況,用戶交互界面是必須的,往往會丟掉自動化處理的好處。數據庫難以測試基于各種事實:他們必須被配置,表結構必須存在,測試數據必須以某種方式持續的生成和刪除,并且當同樣的測試重復時有相同的狀態。開發者社區提供許多策略處理這些問題,在更深的層次介紹單元測試技術,這超出了本書的范圍。
- 本書目錄
- 第一章:Haxe介紹
- 互聯網開發的一個問題
- Haxe是什么,為什么產生
- Haxe編譯工具
- Haxe語言
- Haxe如何工作
- 那么Neko是什么
- Haxe和Neko的必須條件
- 本章摘要
- 第二章:安裝、使用Haxe和Neko
- 安裝Haxe
- 使用Haxe安裝程序
- 在Windows上手動安裝Haxe
- Linux上手動安裝Haxe
- 安裝Neko
- Windows上手動安裝Neko
- 在Linux上安裝Neko
- Hello world! 一式三份
- 編譯你的第一個Haxe應用
- 你的程序如何編譯
- HXML編譯文件
- 編譯到Neko
- 編譯為JavaScript
- 程序結構
- 編譯工具開關
- 本章摘要
- 第三章:基礎知識學習
- Haxe層級結構
- 標準數據類型
- 變量
- 類型推斷
- 常數變量
- 簡單的值類型
- 浮點類型
- 整型
- 選擇數值類型
- 布爾類型
- 字符串類型
- 抽象類型
- Void 和 Null
- 動態類型
- unknown類型
- 使用untyped繞過靜態類型
- 注釋代碼
- 轉換數據類型
- Haxe數組
- Array
- List
- Map
- Haxe中使用日期時間
- 創建一個時間對象
- Date組件
- DateTools類
- 操作數據
- 操作符
- Math類
- 使用String函數
- 本章摘要
- 第四章:信息流控制
- 數據存放之外
- 條件語句
- if語句
- switch語句
- 從條件語句返回值
- 循環
- while循環
- for循環
- 循環集合
- Break和Continue
- 函數
- 類的函數
- 局部函數
- Lambda類
- 本章摘要
- 第五章:深入面向對象編程
- 類和對象
- 實例字段
- 靜態字段
- 理解繼承
- Super
- 函數重載
- 構造器重載
- toString()
- 抽象類和抽象方法
- 靜態字段,實例變量和繼承
- 繼承規則
- 使用接口
- 高級類和對象特性
- 類的實現
- 類型參數
- 匿名對象
- 實現動態
- Typedef
- 擴展
- 枚舉
- 構造器參數
- 本章摘要
- 第六章:組織你的代碼
- 編寫可重用代碼
- 使用包
- 聲明一個包
- 隱式導入
- 顯式導入
- 枚舉和包
- 類型查找順序
- 導入一個完整的包
- 導入庫
- Haxe標準庫
- Haxelib庫
- 其他項目中的庫
- 外部庫
- 使用資源
- 文檔化代碼
- 離線文檔
- 在線文檔
- 單元測試
- haxe.unit包
- 編寫測試
- 本章摘要
- 第七章:錯誤調試
- trace函數
- trace輸出
- haxe的trace和ActionScript的trace
- 異常
- 異常處理
- CallStack和ExceptionStack
- 異常管理類
- 創建完全的異常處理類
- 異常類代碼
- 本章摘要
- 第八章:跨平臺工具
- XML
- XML剖析
- Haxe XML API
- 正則表達式
- EReg類
- 模式
- 定時器
- 延遲動作
- 隊列動作
- MD5
- 本章摘要
- 第九章:使用Haxe構建網站
- Web開發介紹
- Web 服務器
- 使用Web服務器發布內容
- HTML速成課程
- Haxe和HTML的區別
- NekoTools Web Server
- Apache安裝mod_neko
- Windows安裝Apache和mod_neko
- Linux安裝Apache和Mod_Neko
- 第一個Haxe網站
- 使用Neko作為網頁Controller
- neko.Web類
- Neko作為前端控制器
- 本章摘要
- 第十章:使用模板進行分離式設計
- 什么是模板
- Template類
- Template語法
- 使用資產
- 何時在模板中使用代碼
- 服務器端模板的Templo
- 安裝Templo
- 使用Templo
- haxe.Template和mtwin.Templo表達式上的區別
- Attr表達式
- Raw表達式
- 邏輯表達式
- 循環表達式
- set, fill, 和 use表達式
- Templo中使用宏
- 手動編譯模版
- 第十一章:執行服務端技巧
- 第十二章:使用Flash構建交互內容
- 第十三章:使用IDE
- 第十四章:通過JavaScript制作更多交互內容
- 第十五章:通過Haxe遠程通信連接所學
- 第十六章:Haxe高級話題
- 第十七章:Neko開發桌面應用
- 第十八章:用SWHX開發桌面Flash
- 第十九章:多媒體和Neko
- 第二十章:使用C/C++擴展Haxe
- 附加部分