LoginSignup
0
2

More than 1 year has passed since last update.

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

Posted at

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

使用製品

  • Microsoft Visual Studio Community 2019 Version 16.11.4
  • MsTest

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

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

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

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

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

    • テスト用プロジェクトを右クリック → 追加 → 既存の項目
    • または 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

0
2
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
2