Visual StudioでWinFormアプリを作成し、MSTestでCI/CDパイプラインを設定する手順(.NET Framework版)

このガイドでは、Visual Studioを使用してWinFormアプリケーションを作成し、その中にAddメソッドを実装します。そして、MSTestを使ってこのメソッドのテストを行い、それを継続的インテグレーションとデリバリー(CI/CD)のパイプラインに統合する方法を説明します。


1. Visual StudioでWinFormアプリケーションの作成

新しいプロジェクトの作成

1. Visual Studioを起動し、新しいプロジェクトの作成をクリックします。

2. プロジェクトテンプレートからWindows Forms App (.NET Framework) を選択します。

3. プロジェクトに適切な名前を付け(例: MyWinFormApp)、保存場所を指定し、作成をクリックします。

System.Windows.Formsの参照追加

1. プロジェクトが作成されたら、ソリューションエクスプローラーでプロジェクトを右クリックし、追加-参照を選択します。

2. アセンブリタブからSystem.Windows.Formsを選択し、プロジェクトに追加します。

Addメソッドの実装

1. ソリューションエクスプローラーで、Form1.csを開きます。

2. Form1クラスに、2つの整数を引数に取り、その和を返すAddメソッドを追加します。

Addメソッドのコード例:

public int Add(int a, int b)
{
    return a + b;
}

3. ボタンとテキストボックスをフォームに追加し、Addメソッドを使用するロジックを実装します。

ボタンのクリックイベントの例:

private void button1_Click(object sender, EventArgs e)
{
    int num1 = int.Parse(textBox1.Text);
    int num2 = int.Parse(textBox2.Text);
    int result = Add(num1, num2);
    textBox3.Text = result.ToString();
}

このコードでは、ユーザーが2つのテキストボックスに入力した数値を加算し、その結果を別のテキストボックスに表示します。

ビルドと実行

1. アプリケーションが正しく動作することを確認するために、F5キーを押してプロジェクトをビルドし、実行します。


2. MSTestを使用してAddメソッドのテストを作成

1. MSTestプロジェクトの追加

1. ソリューションエクスプローラーでソリューションを右クリックし、新しいプロジェクトの追加を選択します。

2. プロジェクトテンプレートからMSTest Test Project (.NET Core)を選択し、プロジェクト名をMyWinFormApp.Testsとします。

2. WinFormプロジェクトへの参照の追加(およびSystem.Windows.Formsの参照追加)

テストプロジェクトにMyWinFormAppプロジェクトの参照を追加

1. ソリューションエクスプローラーでテストプロジェクトを右クリックし、追加 > 参照 を選択します。

2. プロジェクト タブでMyWinFormAppを選択し、OKをクリックします。

System.Windows.Formsの参照を追加

1. アセンブリ タブに移動し、System.Windows.Forms をリストから選択し、OK をクリックします。

2. ソリューションエクスプローラーでテストプロジェクト (MyWinFormApp.Tests) を右クリックし、追加 > 参照 を選択します。

3. テストクラスとメソッドの作成

1. テストプロジェクトに新しいクラスを追加し、名前をForm1Testsとします。

2. Form1クラスのAddメソッドに対するテストメソッドを作成します。

テストクラスのコード例:

using Microsoft.VisualStudio.TestTools.UnitTesting;
using MyWinFormApp;

[TestClass]
public class Form1Tests
{
    [TestMethod]
    public void Add_ShouldReturnCorrectSum_WhenTwoNumbersAreGiven()
    {
        // Arrange
        var form = new Form1();
        int num1 = 2;
        int num2 = 3;
        int expected = 5;

        // Act
        int result = form.Add(num1, num2);

        // Assert
        Assert.AreEqual(expected, result);
    }
}

[TestMethod] 属性: MSTestでテストメソッドを定義するための属性です。

Arrange: テストの準備を行います。この部分では、Form1クラスのインスタンスを作成し、テストに必要な値を設定します。

Act: テスト対象のメソッドであるAddを実行し、その結果を取得します。

Assert: 結果が期待される値と一致するかを確認します。

4. テストの実行

1. Visual Studioのテストメニューからテスト エクスプローラーを開きます。

2. すべてのテストの実行をクリックし、テストが成功することを確認します。

3. CI/CDパイプラインの設定

CI/CDパイプラインを設定するには、GitHub ActionsやAzure PipelinesのようなCI/CDツールを利用します。ここでは、GitHub Actionsを例に説明します。

1. GitHubリポジトリの作成

1. GitHubで新しいリポジトリを作成します。

2. Visual StudioからソリューションをGitHubにプッシュします。

2. GitHub Actionsワークフローの設定

1. GitHubリポジトリのActionsタブをクリックします。

2. 新しいワークフローを作成をクリックします。

3. .NET Framework用のテンプレートが存在しないため、set up a workflow yourself を選択して、新しいワークフローファイルを手動で作成します。

3. ワークフローファイルの編集

1. dotnet-framework.yml または dotnet-framework-mstest.yml などの名前で新しいYAMLファイルを作成します。

2. 以下のような内容でワークフローファイルを編集します。

:

name: .NET Framework MSTest

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: windows-latest

    steps:
    - uses: actions/checkout@v2

    - name: Setup MSBuild
      uses: microsoft/setup-msbuild@v1

    - name: Restore NuGet packages
      run: nuget restore

    - name: Build solution
      run: msbuild /p:Configuration=Release

    - name: Run tests
      run: |
        & "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\Extensions\TestPlatform\vstest.console.exe" "MyWinFormApp.Tests\bin\Release\MyWinFormApp.Tests.dll"

restore: 依存関係を復元します。

build: アプリケーションをビルドします。

test: MSTestを使ってテストを実行します。

4. ワークフローの保存と実行

1. ワークフローファイルをコミットすると、GitHub Actionsが自動的にワークフローを実行します。

2. Actionsタブでワークフローの実行状況を確認し、すべてのテストが成功し、ビルドが正常に完了していることを確認します。

4. まとめ

.NET FrameworkのテンプレートがGitHub Actionsで提供されていないため、ワークフローは手動で設定する必要があります。この手順では、Visual Studioで作成したWinFormアプリケーションのビルドおよびテストを自動化し、継続的インテグレーション(CI)とデリバリー(CD)のプロセスに組み込む方法を説明しました。

このプロセスにより、コードの変更があるたびに自動的にテストが実行され、アプリケーションの品質が保たれます。