LoginSignup
0
0

【C#】単体テストを作成する方法

Posted at

C#で単体テストを作成する方法

コーディング時にバグが発生するのは仕方のないことですが単体テストを正しく実装しておくことで不等号の向きを誤るなどのコーディングミスを素早く見つけることができます。

そこでC#での単体テストの作成方法について学習したのでn番煎じにはなりますが、まとめていこうと思います!
学習にはMicroSoft Learnのチュートリアルを参考にしました。

環境

  • Windows11
  • Visual Studio 2022

テスト対象の作成

まずはテスト対象のプロジェクトを作成します。
Visual Studioを起動し新しいプロジェクトからコンソールアプリを選択してください。

image.png

ソリューション名は初期状態のままで問題ないためそのまま作成します。

次にテスト対象の関数を作成します。
今回は引数が偶数か奇数かを判定し、bool型で戻り値を返すIsEven()メソッドをProgram.cs内に作成しました。

namespace ConsoleApp1
{
    public class Prog
    {
        public static void Main(string[] args)
        {
            // ビルドを通すため形だけ実装
        }

        public bool IsEven(int x)
        {
            if(x % 2 == 0)
            {
                // 偶数
                return true;
            }
            else
            {
                // 奇数
                return false;
            }
        }

    }
}

単体テストプロジェクトの追加

単体テストを実行するプロジェクトを追加していきます。
[ファイル] メニューで [追加]>[新しいプロジェクト] の順番に選択して「新しいプロジェクトの作成」ウインドウを表示します。

本記事では単体テストの作成方法にフォーカスするため、プロジェクト名称やメソッド名はこだわらないです。ご興味がある方はこちら(MicroSoft公式ページ)などをご覧ください。

image.png

テンプレートで[MSTestテストプロジェクト]を選択し[次へ]をクリックします。
image.png

プロジェクトを構成時に[ソリューションに追加]を選択することで同じソリューション内に単体テストプロジェクトを追加することができます。作成したテストプロジェクトとともに「UnitTest1.cs」というファイルが作成されていれば成功です。

依存関係の追加

テスト対象との依存関係を追加します。
[ソリューションエクスプローラー]>[依存関係]>右クリックから[プロジェクト参照の追加]を選択します。表示された参照マネージャー内で[プロジェクト]>[ソリューション]より対象のプロジェクト(今回は「ConsoleApp1」)を選択し、[OK]をクリックします。

これで「ConsoleApp1」へ依存関係が追加されました。

テストコードの追加

UnitTest1.csに最初から存在しているTestMethod1()メソッドに対してコードを追加してIsEven()メソッドに対して4を渡したときにtrueが返ってくることを確かめるコードを実装します。

[TestMethod]
public void TestMethod1()
{
    var prog = new Prog();

    // IsEvenメソッドの実行
    var result = prog.IsEven(4);

    // 実行結果の検証
    Assert.IsTrue(result);
}

IsEvenメソッドに4を渡し、実行結果をAssert.IsTrue()で検証しています。

テストの実行

[テスト]タブ>[すべてのテストを実行]を選択しテストを実行します。

ビルドエラーが発生する状態ではテストは実行できないため解消が必要です。

image.png

実行に成功したらテストエクスプローラーで結果を確認します。この時緑色になっていればテスト結果がOK、赤色の場合はテスト結果がNGになったことを示しています。
テストエクスプローラーは[テスト]>[テストエクスプローラー]の順番で表示できます。

image.png

テストコードの追加(テスト結果NG)

続いてテスト結果がNGとなってしまったときにどうなるのか実装して確かめてみるためにUnitTest1.csに下記コードを追加しました。

テストメソッドを追加する際にはメソッドの宣言の前に[TestMethod]を追加することでテスト時に実行対象のコードとして解釈されます。

またIsEven()メソッドに対して3を渡してfalseが返ってくることを確認するテストコードです。ただし結果の検証にAssert.IsTrue()メソッドを使用したため結果がNGになることが期待です。

[TestMethod]
public void TestMethod2()
{
    var prog = new Prog();

    // IsEvenメソッドの実行
    var result = prog.IsEven(3);

    // 実行結果の検証
    //Assert.IsFalse(result); <- 正しくはこっち
    Assert.IsTrue(result);
}

テストコードの実行

先ほどと同様の手順でテストを実行した結果が下記になります。追加したテストがNGになっていることがわかります。
image.png

テストコードを修正してもう一度実行し、今度はOKになることを確認します。
[テストメソッド]

[TestMethod]
public void TestMethod2()
{
    var prog = new Prog();

    // IsEvenメソッドの実行
    var result = prog.IsEven(3);

    // 実行結果の検証
    Assert.IsFalse(result);
}

[実行結果]
image.png

テスト結果がOKになっていることが確認できました。

最後に

ここまで、ご覧くださりありがとうございます。
今回は簡単なメソッドを例にC#での単体テストの作成方法をまとめてみました!

戻り値がbool型の場合についてのみ扱いましたが、そのほかの型の場合にもAssertクラスのメソッドを用いることで同様にテストを行うことができます。また、ほかにも意図した例外が発生しているか確認することも可能です。

この記事で皆様のコーディングライフの助けになれれば幸いです!
ではまた次の記事で!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0