發表文章

目前顯示的是有「單元測試」標籤的文章

單元測試法則

圖片
單元測試法則 What should we test? Incoming & Outgoing Messages 上圖表示一個物件是如何被測試的。 測試物件的時候,你可以發現受測物件會 接收 與 發送 訊息: Incoming Messages 表示呼叫受測物件的訊息 Outgoing Messages  表示受測物件 傳遞 給其依賴物件的訊息 訊息可以被傳進物件,也會被物件傳遞出去(如上圖你可以看見有訊息進入物件,也有訊息從物件出去)。 進行測試時,你只能對物件傳遞訊息,沒有辦法看見物件的內部。這就是為什麼要 測試介面,不要測試實作。 (testing the interface, and NOT the implementation.) 測試介面讓我們可以隨意切換實作類別,並且不破壞測試程式。 Query & Command Messages 除了 Incoming & Outgoing Messages 以外,訊息還分為 Query 與 Command 兩種: Query Message: messages return data without changing anything. 只返回 Data,不做修改任何物件屬性的訊息 不會替應用程式帶來副作用。 Command Message: messages modify data without returning any data. 只修改物件屬性,但不返回任何 Data 訊息 一定會有副作用。 合併的 Command 與 Query 訊息: 這種訊息除了修改資料與回傳資料外,還可能有隱藏的副作用。 (如新增一筆 user 資料並返回新的 user ID,但是 DB 內的 ID 自動 +1) 在商業邏輯一定要使用合併訊息時,一定要確保這些訊息不能含有意料外的副作用。 Test Double 為什麼要 Test Double? 1. 隔離依賴: 單元測試目的是要測試受測物件的行為是否符合預期,如果連受測物件的依賴物件也一起進行測試,那就叫做 整合測試 了。 因此單元測試需要隔離依賴。 2. 要求快速: 單元測試的時間應該

JavaScript 前端測試覆蓋率

圖片
JavaScript 前端測試覆蓋率 如果您還沒建置好 JavaScript 前端測試環境,請移步至 建立 JavaScript 單元測試環境 Blanket.js 是一款易於安裝,易於配置且易於使用的 JavaScript 程式覆蓋率庫,可在瀏覽器中和與 Node.js一起使用。 除此之外也是唯一找到可以與 Mocha 前端測試搭配的套件。 Blanket.js 的使用非常簡單,只需要兩個步驟即可。 一、將 Blanket.js 添加到您的 HTML 測試文件: __注意__ mocha-blanket.js 是讓 blanket.js 可以在 mocha 測試之後產生覆蓋率的匹配器。 原始碼文件: blanket.js ,  mocha-blanket.js 二、在受測物件的檔案後方加上 data-cover 屬性 test_taskStorage.html 配置完成的樣子 配置完成,執行 test_taskStorage.html 就會自動產生測試涵蓋率的區塊: 參考文章: 前端 mocha + blanket 產生測試覆蓋率 : 前端覆蓋率套件  Blanket.js 已經失修 。有機會要找新的套件取代。

建立 JavaScript 單元測試環境

圖片
建立 JavaScript 單元測試環境 本案例使用 Mocha 單元測試框架 替專案進行測試。 GETTING STARTED 安裝 mocha $ cd 到專案根目錄 $ npm install mocha 建立測試目錄與測試程式 $ mkdir tests # 建立測試目錄 $ $EDITOR test/test.js # 在測試目錄下,使用你的編輯器建立測試程式 test.js 到目前為止,專案目錄結構如下: ├── index.html ├── node_modules # node 套件目錄 │ │ │ ├── mocha # mocha 目錄 │ │ ├── bin # mocha 執行檔目錄 │ │ │ ├── mocha # mocha 執行檔,我們就是透過這個 mocha 進行單元測試 ├── package-lock.json ├── package.json └── tests # 測試目錄,以後所有測試程式統一放在 tests 目錄下 └── test.js # 測試程式 test.js 確定測試環境已經建立 進行測試之前,一定要先確定測試環境已經建立完成,所以先隨便寫一個一定會 pass 的測試程式。 編輯 test.js 手動進行第一次測試 啟用 Mocha,第一個參數必須是 測試目錄的路徑 $ node_modules/mocha/bin/mocha tests 執行結果: 透過 npm 進行測試 如果覺得每次都要打這麼長的指令才能進行測試,也可以設定 package.json,使用 npm 進行測試。 在 package.json 的 scripts 欄位加入 "test": "mocha --recursive ./tests" 。 修改 package.json { "name": "todolist-libs", "version": &quo

在 Codeigniter 上進行測試

圖片
在 Codeigniter 上進行測試 如果想在 CI 上面使用 PHPUnit 進行測試,可以使用 kenjis 提供的 ci-phpunit-test 。 ci-phpunit-test 讓你在 CI 上面可以很方便就能使用 PHPUnit。 不過使用這個套件之前,有一些必要條件: PHP 版本至少高於 5.4.0 CodeIgniter 至少要有 3.0 至少先安裝 PHPUnit 4.3 以上的版本 ci-phpunit-test 的目錄結構: codeigniter/ ├── application/ │ └── tests/ │ ├── _ci_phpunit_test/ ... 不要碰!裡面是 ci-phpunit-test 使用的檔案 │ ├── Bootstrap.php ... PHPUnit 的 bootstrap 設定檔 │ ├── DbTestCase.php ... 測試 DB 專用的 class │ ├── TestCase.php ... 測試案例專用的 class │ ├── controllers/ ... 把你的 controller 測試程式放進來 │ ├── libraries/ ... 把你的 library 測試程式放進來 │ ├── mocks/ │ │ └── libraries/ ... mock 模擬資料來源專用的 libraries │ ├── models/ ... 把你的 model 測試程式放進來 │ └── phpunit.xml ... PHPUnit 的設定檔 └── vendor/ 透過 Composer 進行安裝 到你的專案目錄下使用 composer 進行下載 ci-phpunit-test $ cd /path/to/codeigniter/ $ composer require kenjis/ci-phpunit-test --dev 下載完成後需要執行一次 install.php 你必須要在專案的根目錄執

PHP 單元測試 安裝篇

圖片
單元測試 PHP 都是用 PHPUnit 這個套件做單元測試。 安裝 PHPUnit 由於筆者仍在使用 PHP 5.6 ,所以以下範例皆是以 PHPUnit5 做介紹。(現在已經出到支援 PHP7.2 的 PHPUnit7) 1. 使用 Composer 安裝 1.cd 到你的專案目錄下 2.cd 到 composer.json 目錄 3.composer require --dev phpunit/phpunit ^5 安裝成功後,執行下列指令若出現 PHPUnit 5.7.26 by Sebasti... 代表安裝成功 *PHPUnit 執行檔會被放在 Composer/vendor/bin/phpunit,日後我們必須透過 phpunit 執行檔來進行測試。 2. 設定 alias (以下為 Osx 系統) 若想讓 phpunit 可以在任何地方都必呼叫, 可以到 ~/.base_profile 新增一條 alias 1. vi ~/.base_profile 2. 加入 alias phpunit="php /path to your project/Composer/vendor/bin/phpunit" 儲存後還要記得 source ~/.base_profile 使指令生效。 如此一來不管到哪個目錄都可以執行 phpunit 指令了! 待續.. ​