.NET ヘルプ

開発者向けSpecFlow C#の仕組み

公開済み 2024年7月1日
共有:

Specflow C#(スペックフロー シーシャープ)

Specflow C# は、振る舞い駆動開発 (Behavior-Driven Development) をサポートするオープンソースのテストフレームワークです。(BDD)それにより、テストシナリオのためのフィーチャファイルを作成することができます。 それは .NET フレームワーク プロジェクトとシームレスに統合されます。

テストを平易な言葉で説明できます。 このメソッドは、開発者と非開発者の協力を容易にします。 誰でもテストシナリオに貢献することができます。 Specflowは主に機能フォルダー内のすべてのテストを管理および実行するためにフィーチャーファイルを使用します。

一方、IronPDFは、.NET内でのPDF操作に特化したライブラリです。 PDFファイルの作成、編集、および読み取りを簡単に行うことができます。 HTMLを直接PDFに変換できます。 この機能は、アプリケーション内でレポートやドキュメントを生成する際に特に便利です。 IronPDFは、Core、Framework、およびStandardを含むさまざまなバージョンの.NETと互換性があります。

Specflow C# と IronPDF は異なる目的を果たしますが、どちらも開発者のツールキットにおいて貴重なツールです。 プロジェクト内で効果的に組み合わせることができます。 例えば、データを取得して処理する機能を定義およびテストするためにSpecflow C#を使用し、そのテスト結果に基づいてレポートを生成するためにIronPDFを利用することができます。 これSpecflowと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のTest Explorerと統合されており、そこですべてのテストを効率的に実行および管理できます。 これにより、テストを実行および管理することが簡単になります。 プロジェクトが正しく構成されていることを確認してください。 プロジェクトをビルドすると、テストはテストエクスプローラーに表示されます。 個別のテストを実行することも、すべてのテストを一度に実行することもできます。

並列テスト実行

Specflowは、全体の実行時間を短縮するために並行テストの実行をサポートしています。これにより、すべてのテストを実行するのにかかる時間が短縮されます。 specflow.json ファイルまたは AssemblyInfo.cs ファイルを設定して、並行実行を有効にする必要があります。

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

この構成では、最大4つのテストを同時に実行できます。

カスタムフック

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#

カスタムフックは強力な機能です。 彼らはテストのセットアップおよびティアダウンプロセスの管理を支援します。

このセクションでは、.NETプロジェクトにおけるテストフレームワークを強化できるSpecflowの5つの主要機能について説明しました。 各機能は、テスト自動化の柔軟性と効率を向上させるために設計されています。

Specflow C#とIronPDFを統合する

Specflow C# (スペックフロー C#)(開発者向けの仕組み): 図2

IronPDFは、C#のライブラリであり、開発者が.NETアプリケーション内でPDFファイルを生成、操作、およびレンダリングすることを可能にします。 この強力なツールは、行動駆動開発(Behavior-Driven Development)と共にSpecflowで使用すると、テストの兵器として貴重な追加となります。(BDD).NET用のフレームワーク。

IronPDFを統合することで、アプリケーションのPDF出力のテストを自動化し、必要な仕様を満たしていることを確認できます。

IronPDFとSpecflow C#の統合使用例

IronPDF を Specflow と組み合わせて使用する実用的なユースケースは、アプリケーションによって生成された PDF レポートの内容とフォーマットを検証することです。 例えば、レポートが正しいデータを含んでいるか、予想されるレイアウトに従っているか、そして規定された要件内でアクセス可能かどうかを自動的にテストすることができます。 この統合は、請求書やコンプライアンスレポートのように、正確な文書が重要なシナリオにおいて特に有用です。

IronPDFをインストールしていることを確認してください。 NuGetパッケージコンソールを使用してインストールできます:

Install-Package IronPdf

Specflow C#(開発者向けの動作方法):図3

ユースケースのコード例

以下は、IronPDF を使用して PDF コンテンツをテストするための SpecFlow ステップ定義を設定する方法を示す完全なコード例です。 この例では、特定のテキストを含むべきアプリケーションによって生成された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#

このコードでは、指定されたパスからPDFを最初に読み込み、次にそのPDFが期待されるテキストを含んでいることを確認するSpecflowステップを定義します。 IronPdf.PdfDocumentクラスは、PDFファイルを読み込んで操作するために使用されます。このセットアップにより、自動テストにPDF検証を統合でき、エラーを見つけるのが容易になります。

結論

Specflow C#(開発者向けの動作方法):図4

要約すると、Specflow C#とIronPDFを組み合わせることで、特にPDFドキュメントを扱う際に、.NETプロジェクトの機能が強化されます。 Specflowは、平易な言葉を使用して詳細なテストシナリオを定義および実行することに優れています。

IronPDFは、強力なPDF操作機能を提供することでこれを補完します。 これらの2つの強力なツールを統合することで、テストプロセスを効率化することができます。 これらの機能を試してみたい方、IronPDFを無料で試す.

< 以前
Octokit .NET(開発者向け使用方法)
次へ >
DotnetOpenAuth .NET Core(開発者向けの仕組み)