【C#】テストプロジェクトを追加して使用する方法

テスト駆動開発を行う上では「ユニットテスト」が欠かせない、という話をしてきました。ユニットテストはとても重要です。この記事ではC#でテスト駆動開発をするために欠かせない「テストプロジェクトの追加方法」を解説していきます。

テスト用のプロジェクトを追加して、外部からメソッド等を呼び出すことで正しい処理をしていくかを検証することが一般的なので、ここで解説することは必ず知っておきたい内容といって過言ではありません。

テストプロジェクトを追加する

テスト駆動開発などを行う場合は、通常のプロダクトコードから離れた場所に別のプロジェクトを追加して、テスト用プログラムからプロダクトプロジェクトを参照してテストを実施していくのが一般的です。テストコードを配置するためのテストプロジェクトを追加して、「レッド」の状態までもっていく方法を解説していきます。テスト駆動開発を実施するための準備に該当します。

1.コンソールアプリを準備する

まずはじめにコンソールアプリケーションを準備しましょう。今回はアプリケーションの名前を「App01」としています。過去の連載でもそうでしたが、連載内で作成するコンソールアプリケーションは連番で作成していきます。

コンソールアプリケーションを作成すると上記のようになっていると思います。画像のように「テストエクスプローラー」が表示されていない場合は、メニューバーの「表示」から「テストエクスプローラー」を選択してください。

ここまで準備ができたら、次はテスト用プロジェクトを追加していきます。

2.テストプロジェクトを追加する

コンソールアプリケーションの準備ができたら、テスト用のプロジェクトを追加していきます。ソリューションエクスプローラーの「ソリューション」を右クリックして「追加」から「新しいプロジェクト」を選択しましょう。

すると以下のように追加するプロジェクトの種類を選択できますので、一覧の中から「単体テストプロジェクト(.Net Framework)」を選択します。

.Net Coreを使用している人は.Net Core用の単体テストプロジェクトを選択して「次へ」ボタンを押下してください。次の画面ではソリューション名を入力できますので、それっぽい名称を入力したら「作成」ボタンを押下します。

するとソリューションエクスプローラーにテスト用プロジェクトが準備されます。以下のようになっていたらテスト用プロジェクトの準備が完了です。

テストエクスプローラーのペインを掘っていくとテストの一覧が表示されます。現在は1ファイルしか存在せず、UnitTest1クラスのTestMethod1メソッドしかありません。

テストメソッドを追加していくとそれに応じてメソッドが追加されていきます。

3.参照を設定する

テストプロジェクトの準備が整ったら、次はテスト用プロジェクトからプロダクト用のプロジェクトが参照できるようにしていきます。TestProjectのペインを開くと「参照」という項目があるので、そこで右クリックをして「参照の追加」を選択します。

するとプロジェクトの一覧が表示されるので「App01」にチェックを入れます。そしたら「OK」ボタンを押下します。今はApp01プロジェクトしかありませんので迷いませんが、複数のプロジェクトが存在する場合はテストしたいプロジェクトを選択してください。

テストプロジェクトに参照が正しく追加されると、先ほどの「参照」を開いたところにApp01が追加されていると思います。

上記のようになってたらテストプロジェクトへの参照の設定は完了です。最後に簡単なテストを実施して「レッド」の状態を確認して見たいと思います。

4.テストを実施する

それでは簡単にテストを実施してみます。プロダクト用プロジェクトであるApp01に対して新規ファイル「Sample.cs」を作成して以下を記載します。

namespace App01
{
    public class Sample
    {
        public bool ReturnTrue()
        {
            return true;
        }
    }
}

大したクラスではありません。ReturnTrueメソッドを一つ持ち、単純にtrueを返しているpublicメソッドを書いただけです。それではテストプロジェクトに戻ります。

テストプロジェクトの「UnitTest01.cs」を選択してください。中にデフォルトで作成された「TestMethod1」メソッドがあると思います。個々のメソッド内にテストを書きます。メソッドを以下のようにしてみましょう。

[TestMethod]
public void TestMethod1()
{
    var sample = new App01.Sample();
    Assert.IsFalse(sample.ReturnTrue());
}

このように記載したらテストを実行します。テストを実行する場合は2つの方法があります。1つ目は、実行したいメソッドの行内で右クリックをして「テストの実行」を選択してテストを実行する方法です。

もう一つの方法はテストエクスプローラーから実行したいテストを選択して、右クリックを押下して「実行」を選択してテストを実行するという方法です。私は1つのテストを実施する場合はメソッド内の右クリックで実行することが多いです。なお、複数のテストを一括して実行させる場合はテストエクスプローラーからしかできませんので注意が必要です。

どちらの方法でも良いので、先ほど更新したTestMethod1のテストを実行させてみてください。すると以下のように「レッド」の状態になると思います。ここまで再現することができれば問題はありません。

今回はテストを準備するところまでを解説しました。ユニットテストを追加することで、メソッドが期待値通りに動くかどうかを検証することができるので非常に使い勝手がよくなります。テスト駆動開発の根幹部分にもなるので、ユニットテストの追加方法はしっかりと覚えておきましょう。