Net
UnitTest
For近期須分享TDD,想到之前上BDD課程筆記,課程只教BDD概念,雖然有實作,但C#實作上沒使用到SpecFlow去編輯DSL(Domain-Specific Language,特定領域語言)語法去對應產出程式碼,所以自行嘗試了一下。網路蠻多用法文章,但都是最簡單的Context,所以剛好課程有提供稍微接近實作一點的例子來嘗試看看。過程中有遇到一些問題,所以稍微紀錄一下。
BDD 則是將開發過程聚焦在軟體的行為和需求上。強調用自然語言(接近人看得懂的語言)描述軟體應該具有的行為,從而讓開發人員、測試人員和非技術人員(如產品經理、業務分析師等)都能清楚地理解需求。
舉個例子,如果一個計算機程式要做加法功能
TDD
BDD
TDD 的核心理念是先編寫測試,再實現功能。開發人員首先為一個功能或模組撰寫測試用例,然後編輯相應的程式碼,以使這些測試用例通過。關注的是單個函數或方法的測試,而 BDD 則關注的是整個功能或系統的行為。在 BDD 中,測試用例更接近用戶需求,因此有助於提高開發團隊和非技術人員之間的溝通和理解。
SpecFlow 是一個用於 .NET 平台的 BDD 工具,可以透過他編寫DSL語言並產出測試Code框架。
新增feature檔案,並在Feature編輯User Story
User Story(用戶故事)是一種描述一個應用程式的使用者需求的情境描述。由三個元素構成:角色(Role)、功能(Feature)和優先順序(Priority)。例如「作為一個用戶,我希望能夠在購物車中加入商品」;優先順序是指每個功能的重要性,通常使用一個數字表示,例如 1 表示最高優先順序。這種由角色、功能和優先順序構成的 User Story 模板通常為「As a (role), I want (feature), so that (benefit)」這樣描述組成,可以幫助團隊更好地定義和理解系統需求。
接著編輯Scenario
Scenario是一個用來描述特定功能行為的描述性語句。它通常使用“Given-When-Then”(假定-當-那麼)語法來說明軟體應該如何在特定情況下表現。Scenario可以作為一個可讀且易於理解的需求說明,幫助開發人員和非技術團隊成員達成共識。假設我們有一個購物網站,我們可以為“將產品添加到購物車”功能撰寫以下Scenario:
直接在feature檔案上按右鍵,點選Define Step,就會自動幫你產生測試Code框架,且名稱都是Follow BDD Scenario的描述
在Define產生程式碼時,在Multi Scenario下很容易生不出Code來,最常見的就是露掉一些情境的程式碼沒產生,這時候沒產生成功的描述會反紫色如下
處理方法有
如果一個Feautre有多個Scenario,物件要做初始設定可以使用ShareContext寫法,根據提供的情境範例如下
接著在測試Code直接使用_sharedContext物件即可