C#でテスト駆動開発できるようにする為のメモ


Visual Studio 2019 で、新規プロジェクト作成と同時に、テスト用のプロジェクトも作成し、テスト駆動開発できるようにする為の覚え書きです。
前提として、個人でC#を勉強中の身に過ぎず、プログラマとしての業務経験はありません。テスト駆動ってこんな感じかなーと探り探り進めている状態です。

使用製品

  • Microsoft Visual Studio Community 2019 Version 16.11.4
  • MsTest

なぜMSTest かというと、参考にしたサイトが MSTest を使っていたからです。

プロジェクト作成時にやること

  • 新規プロジェクトを作成する
  • テスト用のプロジェクトを作成する

    • 作成したプロジェクトの親になるソリューションを右クリック→追加 → 新しいプロジェクト
    • 「新しいプロジェクトを追加」画面で、「単体テスト プロジェクト (.NET Framework)を選択
    • 「新しいプロジェクトを構成します」画面になるので、テスト用プロジェクトのプロジェクト名を入力。場所はソリューションのフォルダと同じでよい
  • プロジェクト間の参照設定をする

    • ソリューションエクスプローラで、テスト用プロジェクトの「参照」を右クリック→参照の追加→
    • 「参照マネージャー」でプロジェクトタブを選択 → テスト対象のプロジェクト(最初に新規作成したプロジェクト)にチェックを入れる
  • テスト用クラスのテンプレートをインポートする

    • テスト用プロジェクトを右クリック → 追加 → 既存の項目
    • または Shift + Alt + A

テスト用クラスのテンプレート

C#:UnitTest.cs
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;

namespace UnitTest
{
    [TestClass]
    public class UnitTest1
    {
        static Namespace.Class1 _TargetClass = null;

        // テスト前の処理
        [ClassInitialize()]
        public static void ClassInitialize(TestContext testContext)
        {
            _TargetClass = new Namespace.Class1 ();
        }

        // テスト後の処理
        [ClassCleanup()]
        public static void ClassCleanup()
        {
            _TargetClass = null;
        }

        //テスト本体
        [TestMethod()]
        public void Class1_Test()
        {
        }

    }
}

テストを書いていく際の備忘録

プライベートメソッドをテストしたい場合

privateメソッドをテストするには、PrivateObjectクラスのInvokeメソッドを使用します。
山本隆の開発日誌 - MSTestでprivateメソッドをテストする

その他、private static、親クラスのprivate メソッド等々、privateメソッドのテストについては上記ページで事足りる。

なお、.NET Core では PrivateObject クラスが廃止されており、private メソッドのテストは推奨されない模様

PrivateObject and PrivateType are not available for a project targeting netcorapp2.0 #366