しまぞうブログ

プログラミングと資産運用

Visual StudioでのC#プログラミング入門【単体テスト】

Visual Studioには効率的にテストを行える環境があります。しかし、使い方をよく知らないと、面倒だったり使いにくく感じる可能性さえあります。

そこで本記事では、Visual StudioC#プログラミングをする際の単体テスト方法を解説します。

関連記事

環境

手順

テスト対象のプログラム

以下のサンプルプログラムをテスト対象とします。加算と減算をするだけです。

using System;

namespace CalculateNS
{
    public class Calculate
    {
        public static int Addition(int a,int b)
        {
            return a + b;
        }

        public static int Difference(int a,int b)
        {
            return a - b;
        }

        public static void Main()
        {
            int n = Calculate.Addition(1, 1);
            int m = Calculate.Difference(2, 1);
            Console.WriteLine("Add:" + m + "Dif:" + n);
        }
    }
}

テストプロジェクトの作成

はじめにテスト用のプロジェクトを作成します。

「ファイル」→「追加」→「新しいプロジェクト」の順にクリックします。

検索窓に「テスト」と入力すると出てくる「MSTestテストプロジェクト」を選択し「次へ」を押します。

プロジェクト名を入力し「次へ」を押します。

「.NET 6.0」を選択し「作成」を押すと、テストプロジェクトが作成されます。

参照の追加

テストプロジェクト内でテスト対象のプロジェクトを参照できるようにします。その手順を説明します。

テストプロジェクト内の「依存関係」を右クリックし、「プロジェクト参照の追加」をクリックします。

以下の画面が表示されたら、「プロジェクト」をクリックします。
テスト対象のプロジェクト全てにチェックを入れたら、「OK」を押します。

この設定をしてもテスト対象のプロジェクトを参照できない場合、以下のサイトにいくつかの解決策が記載されていますので、参考にしてください。
webdevqa.jp.net:型または名前空間の名前が存在しません

テストプログラムの作成

テストを実行するためのコードを記述します。

以下のサンプルでは、テスト対象プログラムのAdditionメソッドが想定通り動作しているかテストします。

using Microsoft.VisualStudio.TestTools.UnitTesting;
using CalculateNS;

namespace TestProject1
{
    [TestClass]
    public class CalculateTests
    {
        [TestMethod]
        public void TestMethod1()
        {
            int n = Calculate.Addition(1, 2);
            Assert.AreEqual(3, n);      // 期待される値になっているかテスト
            Assert.IsTrue(n == 3);      // Trueかどうかをテスト
        }
    }
}

2行目のusing CalculateNS;でテスト対象のメソッドを含む名前空間を記述しておくと、テストプログラム内で名前空間をコード内で省略できます。

13行目のAssert.AreEqualは値が一致しているかどうかをテストします。また14行目のAssert.IsTrueは式がTrueかどうかをテストします。

他にもAssert.*は色々あるみたいですが、基本的にはこの2つのメソッドで十分です。

テストの実行

テストを実行するには、「テスト」→「テストエクスプローラー」の順にクリックし、テストエクスプローラーを表示します。

テストエクスプローラーが表示されたら、「実行」(下図赤枠内の三角)を押してテストプログラムを実行します。このテストでは全て想定通りのテスト結果となるため、緑のチェックマークがつきます。

テスト結果がNGとなるように、テストプログラムの14行目を「Assert.IsTrue(n==2);」に変更してテストを実行してみます。

すると、以下のように×マークとなり、想定した値が得られていないことが示されます。NG箇所はテスト詳細の概要で確認できますので、それを参考にデバッグしましょう。

参考サイト