【C#】ユニットテストで使用するAssertの基本を解説

テストエクスプローラーにて、テストコードにおいてテストの合否を判定する方法について解説します。テストメソッド内においてテストの値を判定するにはAssertクラスというものを利用します。この記事ではAssertクラスの基礎的な部分よく使うメソッドを紹介していきます。

テストを判定するには

まずテストを判定する方法について解説していきます。アプリケーション開発においてテスト駆動開発をする場合は、おもにユニットテストを自動化させます。ユニットテストではメソッドを検証することになりますが、それは少なくとも何かしらの値が「予想通りになっているか」を判定することになります。

その「何かしらの値」を判定する方法が必要になります。その値の判定がユニットテスト、およびテスト駆動開発をするために、Assertクラスを使用しなくてはなりません。

Asserクラスとは

Assertクラスとはオブジェクト動詞を比較するメソッドを集めたクラスであり、テスト駆動開発において最も使用頻度の高くなるクラスになります。

  • AreEqualメソッド
  • IsTrueメソッド
  • IsFalseメソッド
  • IsNullメソッド
  • IsNotNullメソッド

などが用意されています。コレクションの検証にはCollectionAssertクラス、特殊な文字列にはStringAssertクラスを使用しますが、ここでは基本的なAssertクラスを使います。

Assertクラスの使い方

それでは簡単にAssertクラスを使用する方法を解説していきます。UnitTestを追加した直後は以下のような状態でアプリケーションが立ち上がっています。

UnitTestProject1内のUnitTest1クラスに属するTestMethod1メソッドは以下の通りになっています。

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
    }
}

ここから代表的な機能をいくつか見ていきたいと思います。基本的にメソッドはTestMetod1内に記載していきますので、今回はクラス等の追加はしないようにしていきます。

AreEqualメソッド

まずはAreEqualメソッドについて解説しますが、AreEqualメソッドは二つのオブジェクトを比べて同じであるかを判定します。例えば以下のような感じで使うことができます。

int num1 = 10;
int num2 = 10;
Assert.AreEqual(num1, num2);

string hello1 = "おはよう";
string hello2 = "おはよう";
Assert.AreEqual(hello1, hello2);

数値や文字列判定を行い、中身が同一であるかを判定します。中身が同一である場合はテスト結果は真となり「グリーン」になります。

IsTrueメソッド

IsTrueメソッドは値がTrueである場合にテスト結果をグリーンにしてくれるメソッドになります。ユニットテストの結果をブール値で判定したい場合などに有効ですね。

bool flg = true;
Assert.IsTrue(flg);

int num3 = 5;
Assert.IsTrue(num3 * 2 == 10);

単純にtrue / false になるブール値を渡すのもよいですが、条件式を渡して判定にするのも問題ないようになります。判定したい値がtrueであればグリーンになり、値がfalseであればレッドになります。

IsFalseメソッド

IsTrueメソッドの反対にあたるのがIsFalseメソッドになります。IsTrueは値がtrueであればグリーンでしたが、IsFalseメソッドでは値がfalseであれはグリーンになります。

bool flg2 = false;
Assert.IsFalse(flg2);

int num4 = 4;
Assert.IsFalse(num4 * 3 == 13);

IsTrueメソッドと同様に値で判定を行ってもよいですし、条件式を渡して真偽の判定を行っても良くなります。IsTrueとIsFalseは同じようなものなので、使用する局面に応じて必要な方を使うとよいと思います。

IsNullメソッド

IsTrueやIsFalseとは別にnullかどうかを判定するメソッドも用意されています。IsNullメソッドでは渡した値がNullである場合にグリーンとなり、それ以外ならばレッドになります。

int? num5 = null;
Assert.IsNull(num5);

分かりやすくするためにnullableのint型に対してnullを突っ込んで判定するようにしました。IsNullメソッドでは、たとえばユニットの戻り値がnullを返すような異常パターンの判定などに使えるでしょう。

IsNotNullメソッド

IsNullメソッドの反対にあたるのがIsNotNullメソッドです。このメソッドはIsNullメソッドの真逆にあたるので使用方法も簡単です。

int? num6 = 5;
Assert.IsNotNull(num6);

Nullでないものを拾うので、殆どの場合ではTrueになるんじゃないかと思います。IsNullは使い道がありそうですが、IsNotNullは「何か値が入っていること」程度の確認にしかならないので、あまり出番はないかもしれませんね。

判定で使用するAssertは知っておこう

C#のユニットテストで使用する判定では Assert は最も基本的で、一番使用されるものになりますのでしっかりと押さ得ておく必要があります。ここで紹介した内容は、何度も復習しておいて覚えておくと便利です。

  • AreEqual
  • IsTrue
  • IsFalse

中でも上記のメソッドは特に使用するので、使い方を覚えておく必要があります。サンプルコードを読んで、しっかりとメソッドの使い方を理解しておきましょう。