行為驅動開發 - SpecFlow



SpecFlow 是一個開源專案。原始碼託管在 GitHub 上。SpecFlow 使用的特性檔案用於儲存應用程式中特性(用例、使用者故事)的驗收標準,這些標準使用 Gherkin 語法定義。

Gherkin 格式由 Cucumber 引入,也用於其他工具。Gherkin 語言作為 GitHub 上的一個專案維護著 − https://github.com/cucumber/gherkin

特性元素和 SpecFlow

特性元素的關鍵特性是:

  • 特性元素為特性檔案提供標題。特性元素包括應用程式中相應特性的名稱和高階描述。

    • SpecFlow 為特性元素生成一個單元測試類,類名從特性的名稱派生。

    • SpecFlow 從代表驗收標準的場景生成可執行的單元測試。

  • 一個特性檔案可能包含多個場景,用於描述特性的驗收測試。

    • 場景有名稱,可以包含多個場景步驟。

    • SpecFlow 為每個場景生成一個單元測試方法,方法名從場景的名稱派生。

多個場景步驟

場景可以有多個場景步驟。有三種類型的步驟定義了前提條件、操作或驗證步驟,這些步驟構成了驗收測試。

  • 不同的步驟型別分別以Given、WhenThen關鍵字開頭,相同型別的後續步驟可以使用AndBut關鍵字連結。

  • Gherkin 語法允許這三種步驟型別的任何組合,但場景通常具有Given、WhenThen語句的不同塊。

  • 場景步驟使用文字定義,並且可以具有稱為 DataTable 的附加表或稱為 DocString 的多行文字引數。

  • 場景步驟是執行任何自定義程式碼來自動化應用程式的主要方式。

  • SpecFlow 為每個場景步驟在單元測試方法內生成一個呼叫。該呼叫由 SpecFlow 執行時執行,該執行時將執行與場景步驟匹配的步驟定義。

  • 匹配在執行時完成,因此即使尚未實現繫結,也可以編譯和執行生成的測試。

  • 您可以在場景步驟中包含表格和多行引數。這些引數由步驟定義使用,並作為附加表格或字串引數傳遞。

標籤

標籤是可以分配給特性和場景的標記。將標籤分配給特性等同於將標籤分配給特性檔案中的所有場景。以@開頭的標籤名稱表示標籤。

  • 如果單元測試框架支援,SpecFlow 會從標籤生成類別。

  • 生成的類別名稱與標籤名稱相同,但不包括前導@。

  • 您可以使用這些單元測試類別來過濾和分組要執行的測試。例如,您可以用@important標記關鍵測試,然後更頻繁地執行這些測試。

背景元素

背景語言元素允許為特性檔案中的所有場景指定一個共同的前提條件。

  • 檔案的背景部分可以包含一個或多個場景步驟,這些步驟在任何其他場景步驟之前執行。

  • SpecFlow 從背景元素生成一個方法,該方法從為場景生成的全部單元測試中呼叫。

場景大綱

場景大綱可用於定義資料驅動的驗收測試。場景大綱始終包含場景模板規範(使用 語法帶有資料佔位符的場景)和一組提供佔位符值的示例。

  • 如果單元測試框架支援,SpecFlow 會從場景大綱生成基於行的測試。

  • 否則,它將為場景大綱生成一個引數化的單元測試邏輯方法,併為每個示例集生成一個單獨的單元測試方法。

  • 為了更好的可追溯性,生成的單元測試方法名稱是從場景大綱標題和示例的第一個值(示例表的第 一列)派生的。

  • 因此,最好選擇一個唯一且具有描述性的引數作為示例集中的第一列。

  • 由於 Gherkin 語法確實要求所有示例列在場景大綱中具有匹配的佔位符,因此您甚至可以在示例集中引入任意列,以便以更高的可讀性來命名測試。

  • SpecFlow 在匹配步驟繫結之前,將佔位符替換作為單獨的階段執行。

  • 因此,步驟繫結中的實現和引數與它們是透過直接場景還是場景大綱執行無關。

  • 這允許您稍後在驗收測試中指定更多示例,而無需更改步驟繫結。

註釋

您可以透過以 # 開頭添加註釋行到特性檔案的任何位置。但是,請注意,規範中的註釋可能表示驗收標準指定錯誤。SpecFlow 會忽略註釋行。

廣告