NUnitとは、C#で単体テストを実行するためのフレームワークです。
JavaだとJUnit, PHPだとPHPUnitがあるので名前から何となく想像つく人もいるのかもしれません。
今回は、テストケースごとにSetUp処理、TearDown処理を呼び出す方法について書いていこうと思います。
SetUp処理、TearDown処理とは
まず各処理の説明を簡単にまとめていこうと思います。
using NUnit.Framework;
using System;
[TestFixture]
class SampleTestFixture
{
[SetUp]
public void SetUp()
{
Console.WriteLine("ファイルの作成処理");
}
[TearDown]
public void TearDown()
{
Console.WriteLine("ファイルの削除処理");
}
[Test]
public void ReadFileTest1()
{
Console.WriteLine("ファイルの読込みテスト1");
}
[Test]
public void ReadFileTest2()
{
Console.WriteLine("ファイルの読込みテスト2");
}
}
SetUp
属性が付与された処理は、各テストケースが呼び出される直前に呼び出されます。
この処理を実装することで、各テストケース共通の事前条件・事前準備といった処理を書くことができます。
※ 上記の場合ではSetUp処理で、ファイルの作成処理を呼び出す例です。
TearDown
属性が付与された処理ですが、各テストケースが呼び出された直後に呼び出されます。
この処理を実装することで、各テストケース共通の後始末処理を書くことができます。
※ 上記の場合では TearDown処理 でテスト後のファイルを削除する例です。
詳しく説明しませんでしたが、詳しく知りたい人は以下ページに記載されているのでご覧ください。
SetUp and TearDown
テストケースごとのSetUp処理、TearDown処理
簡単にSetUp処理、TearDown処理について説明しましたが、テストケースごとに処理を分岐させたいこともあるかもしれません。(ReadFileTest1
メソッドではファイルAを読み込むが、ReadFileTest2
メソッドではファイルBを読み込むなど)
結論から言えば、以下のように内部クラスを使えば問題を解決することができます。
[TestFixture]
class SampleTestFixture
{
[TestFixture]
class ReadFileACondition
{
[SetUp]
public void SetUp()
{
Console.WriteLine("ファイルAの作成処理");
}
[Test]
public static void ReadFileTest1()
{
Console.WriteLine("ファイルAの読み込みテスト");
}
[TearDown]
public void TearDown()
{
Console.WriteLine("ファイルAの削除処理");
}
}
[TestFixture]
class ReadFileBCondition
{
[SetUp]
public void SetUp()
{
Console.WriteLine("ファイルBの作成処理");
}
[Test]
public static void ReadFileTest2()
{
Console.WriteLine("ファイルAの読み込みテスト");
}
[TearDown]
public void TearDown()
{
Console.WriteLine("ファイルBの削除処理");
}
}
[SetUp]
public void SetUp()
{
Console.WriteLine("SetUp処理1");
}
[TearDown]
public void TearDown()
{
Console.WriteLine("TearDown処理1");
}
}
ただ一つ問題点があり、内部クラスのテストケース実行時には、対応する外部クラスのSetUp処理、TearDown処理を呼び出すことができません。
※ 上記の例ではファイルAの読み込みテストの前後にSetUp処理1とTearDown処理1が動きません‼
以上。