.NET 幫助

Specflow C#(開發人員工作原理)

發佈 2024年7月1日
分享:

Specflow C

Specflow C# 是一個開源的測試框架,支持行為驅動開發。(BDD)並允許您為測試場景創建功能文件。 它可以無縫整合到.NET Framework專案中。

您可以用簡單的語言描述測試。 此方法促進開發人員與非開發人員之間的協作。 每個人都可以參與測試場景的貢獻。 Specflow 主要使用功能文件來管理和執行功能資料夾中的所有測試。

另一方面,IronPDF 是專注於 .NET 中的 PDF 操作的程式庫。 它允許您輕鬆地創建、編輯和閱讀 PDF 文件。 您可以直接將 HTML 轉換為 PDF。 此功能特別適合在應用程式中生成報告或文件。 IronPDF 兼容多種版本的 .NET,包括 Core、Framework 和 Standard。

雖然 Specflow C# 和 IronPDF 用途不同,但它們在開發者的工具箱中是非常有價值的工具。 它們可以在專案中有效地結合起來。 例如,您可以使用 Specflow C# 定義和測試一個功能,該功能中數據被檢索和處理,然後使用 IronPDF 根據測試結果生成報告。 ThisSpecflow 和 IronPDF 整合教程展示這些工具如何協同工作來增強您的應用程式開發過程。

Specflow C# 入門

在 .NET 專案中設定 Specflow

要開始在您的 .NET 專案中使用 Specflow,首先需要安裝 Specflow NuGet 套件,以設定您的測試框架、建立功能文件並定義測試場景。

  1. 打開 Visual Studio。

  2. 創建一個新的 .NET 專案或打開一個現有的專案。

  3. 前往擴充功能選單,然後管理擴充功能。

  4. 搜尋 "Specflow"。 安裝 Specflow 擴展。

    Specflow C#(對開發人員的工作原理):圖1

基本代碼範例

一旦 Specflow 設置完成,您可以創建第一個功能文件,該文件將位於 features 資料夾中。 Specflow 中的功能文件以可讀的格式概述您想要測試的行為。 以下是如何建立新功能檔案並定義情境的簡單範例:

Feature: Login Feature
    Scenario: Successful Login with Valid Credentials
        Given I am on the login page
        When I enter valid credentials
        Then I should be redirected to the dashboard
Feature: Login Feature
    Scenario: Successful Login with Valid Credentials
        Given I am on the login page
        When I enter valid credentials
        Then I should be redirected to the dashboard
Feature:
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Login Feature Scenario: Successful Login @with Valid Credentials Given I am on the login page @When I enter valid credentials @Then I should be redirected @to the dashboard
VB   C#

此功能文件描述了一個基本的登入過程。 Given 為測試設定場景。When 描述動作。 Then 定義預期結果。 您用簡單的英文寫下這些語句。 這使理解測試的流程和目的變得容易。

實作 Specflow C# 的功能

使用步驟定義撰寫測試

在 Specflow 中,測試由功能檔案中描述的場景驅動。 要使這些場景可執行,您需要步驟定義。 步驟定義將簡單語言的步驟與 C# 代碼綁定起來。 以下是您如何定義步驟定義的方法:

[Binding]
public class LoginSteps
{
    [Given(@"I am on the login page")]
    public void GivenIAmOnTheLoginPage()
    {
        // Code to navigate to the login page
    }

    [When(@"I enter valid credentials")]
    public void WhenIEnterValidCredentials()
    {
        // Code to input username and password
    }

    [Then(@"I should be redirected to the dashboard")]
    public void ThenIShouldBeRedirectedToTheDashboard()
    {
        // Code to verify the dashboard is displayed
    }
}
[Binding]
public class LoginSteps
{
    [Given(@"I am on the login page")]
    public void GivenIAmOnTheLoginPage()
    {
        // Code to navigate to the login page
    }

    [When(@"I enter valid credentials")]
    public void WhenIEnterValidCredentials()
    {
        // Code to input username and password
    }

    [Then(@"I should be redirected to the dashboard")]
    public void ThenIShouldBeRedirectedToTheDashboard()
    {
        // Code to verify the dashboard is displayed
    }
}
<Binding>
Public Class LoginSteps
	<Given("I am on the login page")>
	Public Sub GivenIAmOnTheLoginPage()
		' Code to navigate to the login page
	End Sub

	<[When]("I enter valid credentials")>
	Public Sub WhenIEnterValidCredentials()
		' Code to input username and password
	End Sub

	<[Then]("I should be redirected to the dashboard")>
	Public Sub ThenIShouldBeRedirectedToTheDashboard()
		' Code to verify the dashboard is displayed
	End Sub
End Class
VB   C#

這個 C# 類別代表了登入場景的步驟。 每個方法都標記有一個與步驟類型相對應的Specflow屬性,例如用於識別特定步驟的字符串鍵。

数据驱动测试

Specflow 支援資料驅動測試,允許您在情境中利用各種測試數據集。 這使您可以使用各種數據集來測試場景。 以下是功能文件中使用表格的示例:

Scenario: Login with multiple users
    Given I am on the login page
    When I login with the following credentials:

 Username  
 Password  

 user1     
 pass1     

 user2     
 pass2     

    Then I should see user specific dashboard
Scenario: Login with multiple users
    Given I am on the login page
    When I login with the following credentials:

 Username  
 Password  

 user1     
 pass1     

 user2     
 pass2     

    Then I should see user specific dashboard
Scenario:
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Login @with multiple users Given I am on the login page @When I login @with the following credentials: Username Password user1 pass1 user2 pass2 @Then I should see user specific dashboard
VB   C#

在您的步驟定義中,您可以按照以下方式訪問這些資料:

[When(@"I login with the following credentials:")]
public void WhenILoginWithTheFollowingCredentials(Table table)
{
    foreach(var row in table.Rows)
    {
        string username = row["Username"];
        string password = row["Password"];
        // Code to perform login
    }
}
[When(@"I login with the following credentials:")]
public void WhenILoginWithTheFollowingCredentials(Table table)
{
    foreach(var row in table.Rows)
    {
        string username = row["Username"];
        string password = row["Password"];
        // Code to perform login
    }
}
<[When]("I login with the following credentials:")>
Public Sub WhenILoginWithTheFollowingCredentials(ByVal table As Table)
	For Each row In table.Rows
		Dim username As String = row("Username")
		Dim password As String = row("Password")
		' Code to perform login
	Next row
End Sub
VB   C#

與測試瀏覽器的整合

Specflow 與 Visual Studio 的測試探索器整合,您可以在那裡高效地執行和管理所有測試。 這使您能夠輕鬆執行和管理您的測試。 確保您的專案配置正確。 建置專案後,您的測試將顯示在測試總管中。 您可以單獨執行測試或一次性執行所有測試。

平行測試執行

Specflow 支援平行執行測試以減少整體執行時間。這樣可以減少執行所有測試所需的時間。 您需要配置您的 specflow.json 文件或 AssemblyInfo.cs 以啟用並行執行:

{
  "specFlow": {
    "runtime": {
      "testThreadCount": 4,
      "testSchedulingMode": "Parallel"
    }
  }
}

此配置允許同時進行最多四個測試。

自訂掛鉤

Specflow允許您定義自定義鉤子。 這些鉤子能在測試生命週期的不同階段執行程式碼。 以下是您可以如何定義一個鉤子,以在任何測試運行之前設置數據庫:

[BeforeTestRun]
public static void SetUpDatabase()
{
    // Code to set up database
}
[BeforeTestRun]
public static void SetUpDatabase()
{
    // Code to set up database
}
<BeforeTestRun>
Public Shared Sub SetUpDatabase()
	' Code to set up database
End Sub
VB   C#

自定義鉤子是一個強大的功能。 它們幫助您管理測試設置和拆卸過程。

本節介紹了 Specflow 的五個關鍵功能,這些功能可以增強 .NET 專案中的測試框架。 每項功能都旨在提高測試自動化工作的靈活性和效率。

將 Specflow C# 與 IronPDF 整合

Specflow C#(它如何為開發人員運作):圖2

IronPDF 是一個 C# 函式庫,允許開發者在 .NET 應用程式中生成、操作和渲染 PDF 檔案。 當與 Specflow 這種行為驅動開發工具結合使用時,這款強大的工具可以成為您測試工具中的寶貴成員。(BDD)框架用於 .NET。

通過整合 IronPDF,您可以自動化測試應用程式中的 PDF 輸出,確保它們符合所需規格。

IronPDF 與 Specflow C# 合併的使用案例

將IronPDF與Specflow結合的一個實際用例是驗證您的應用程序生成的PDF報告的內容和格式。 例如,您可以自動測試報告是否包含正確的數據、符合預期的版面設計,並在規定的要求內可供訪問。 此整合在需要準確文檔(如發票或合規報告)的情境中特別有用。

確保您已安裝IronPDF。 您可以通過 NuGet 套件控制台安裝它:

Install-Package IronPdf

Specflow C#(它如何為開發人員工作):圖3

使用案例的程式碼範例

以下是完整的代碼範例,演示如何設置 SpecFlow 步驟定義以使用 IronPDF 測試 PDF 內容。 此範例假設您正在測試由您的應用程式生成的 PDF 文件,該文件應包含特定文本:

using IronPdf;
using TechTalk.SpecFlow;

[Binding]
public class PdfContentSteps
{
    private string? _pdfPath;
    private PdfDocument? _pdfDocument;

    [Given(@"a PDF file generated at '(.*)'")]
    public void GivenAPDFFileGeneratedAt(string pdfPath)
    {
        _pdfPath = pdfPath;
        _pdfDocument = new PdfDocument(_pdfPath);
    }

    [Then(@"the PDF should contain the text '(.*)'")]
    public void ThenThePDFShouldContainTheText(string expectedText)
    {
        var textContent = _pdfDocument.ExtractAllText();
        if (!textContent.Contains(expectedText))
        {
            throw new Exception("PDF content does not contain the expected text.");
        }
    }
}
using IronPdf;
using TechTalk.SpecFlow;

[Binding]
public class PdfContentSteps
{
    private string? _pdfPath;
    private PdfDocument? _pdfDocument;

    [Given(@"a PDF file generated at '(.*)'")]
    public void GivenAPDFFileGeneratedAt(string pdfPath)
    {
        _pdfPath = pdfPath;
        _pdfDocument = new PdfDocument(_pdfPath);
    }

    [Then(@"the PDF should contain the text '(.*)'")]
    public void ThenThePDFShouldContainTheText(string expectedText)
    {
        var textContent = _pdfDocument.ExtractAllText();
        if (!textContent.Contains(expectedText))
        {
            throw new Exception("PDF content does not contain the expected text.");
        }
    }
}
Imports IronPdf
Imports TechTalk.SpecFlow

<Binding>
Public Class PdfContentSteps
'INSTANT VB WARNING: Nullable reference types have no equivalent in VB:
'ORIGINAL LINE: private string? _pdfPath;
	Private _pdfPath As String
	Private _pdfDocument? As PdfDocument

	<Given("a PDF file generated at '(.*)'")>
	Public Sub GivenAPDFFileGeneratedAt(ByVal pdfPath As String)
		_pdfPath = pdfPath
		_pdfDocument = New PdfDocument(_pdfPath)
	End Sub

	<[Then]("the PDF should contain the text '(.*)'")>
	Public Sub ThenThePDFShouldContainTheText(ByVal expectedText As String)
		Dim textContent = _pdfDocument.ExtractAllText()
		If Not textContent.Contains(expectedText) Then
			Throw New Exception("PDF content does not contain the expected text.")
		End If
	End Sub
End Class
VB   C#

在此程式碼中,我們定義了一個 Specflow 步驟,該步驟首先從指定路徑載入 PDF,然後驗證此 PDF 是否包含預期的文本。 IronPdf.PdfDocument 類別用於加載和操作 PDF 文件。此設置允許您將 PDF 驗證集成到自動化測試中,從而更容易捕捉錯誤。

結論

Specflow C#(開發人員運作方式):圖 4

總而言之,結合 Specflow C# 和 IronPDF 能夠增強您的 .NET 專案的功能,特別是在處理 PDF 文件時。 Specflow 在使用簡單語言定義和執行詳細測試場景方面表現出色。

IronPDF透過提供強大的PDF操控功能來補充這一點。 透過整合這兩個強大的工具,您可以簡化測試流程。 如果您正在尋找體驗這些功能,免費試用 IronPDF.

< 上一頁
Octokit .NET(如何為開發人員運作)
下一個 >
Dotnetopenauth .NET Core(它如何為開發人員工作)