なんだかGoodVibes

日々の勉強メモです。

【C#】NUnitでユニットテストを自動化する

こんにちは。
本日はC#NUnitについてのメモです。

概要

ユニットテスト(=単体テスト)をNUnitを使用して
自動化してみます。

本記事では、dotnetコマンドを使用して操作していきます。


テストプロジェクトの追加と基本的な記載方法

1. プロジェクトの追加

テストの対象となるソリューションにテスト用プロジェクトを追加します。
「Test」という名前でテストプロジェクトを追加します。

$ dotnet new nunit -o Test

追加されたプロジェクト内に、以下のような雛形が追加されます。
これを参考にテストプログラムを追加していきます。

using NUnit.Framework;

namespace Test
{
    public class Tests
    {
        [SetUp]
        public void Setup()
        {
        }

        [Test]
        public void Test1()
        {
            Assert.Pass();
        }
    }
}
2. ソリューションへの追加

テストプロジェクトをターゲットのソリューションに追加します。

$ dotnet sln add ./Test/Test.csproj 
3. 参照設定

テストプロジェクトからターゲットのプロジェクトを参照できるよう
参照設定に追加します。

ここではターゲットのプロジェクトは「Target」という名前とします。

$ dotnet add reference ../Target/Target.csproj 
4. テストパターンの記載

以下のクラスのGetHelloWorldの戻り値をテストしてみます。

public static class Utils
{
    public static string GetHelloWorld()
    {
        return "Hello World!";
    }
}

Assert.AreEqualを使用して
戻り値が「Hello World!」であることをテストします。

using NUnit.Framework;

namespace Test
{
    [TestFixture]
    public class UtilsTest
    {
        [Test]
        public void GetHelloWorld_Test()
        {
            var str = Utils.GetHelloWorld();

            Assert.AreEqual(str, "Hello World!");
        }
    }
}
5. テストの実行

以下のコマンドでテストを実行します。

$ dotnet test

実行すると結果が表示されます。

テストの実行に成功しました。
テストの合計数: 1
     成功: 1

戻り値を書き換えてNGとなるようにすると
以下のように結果が表示されます。

  X GetHelloWorld_Test [52ms]
  エラー メッセージ:
     Expected string length 6 but was 12. Strings differ at index 0.
  Expected: "こんにちは!"
  But was:  "Hello World!"
  -----------^
  スタック トレース:
     xxxxx...

テストの実行に失敗しました。
テストの合計数: 1
     失敗: 1


これでテストの準備と実行ができました。
人の手によるテストではミスもあります。
このように自動化に頼るのがベストですね。



以上です。