NUnitの属性の指定

NUnitの属性の指定の仕方を調べたので簡単にメモ

TestFixture, Test

一番の基本。TestFixtureでテストコードとなるクラスを指定し、Testにテストメソッドを指定する。

[TestFixture]
public class TestClass
{
    [Test]
    public void Test1()
    {
        // なんかテスト
    }
}

SetUp, TearDown

テストメソッドの実行前、実行後に必ず行われる処理を指定する。

[TestFixture]
public class TestClass
{
    [SetUp]
    public void Init()
    {
        // 初期化処理
    }

    [TearDown]
    public void Terminate()
    {
        // 終了処理
    }

    [Test]
    public void Test1()
    {
        // なんかテスト
    }

    [Test]
    public void Test2()
    {
        // なんかテスト
    }
}

上記の場合、以下の順に実行される

  1. Init()
  2. Test1()
  3. Terminate()
  4. Init()
  5. Test2()
  6. Terminate()

TestFixtureSetUp, TestFixtureTearDown

全てのテストメソッドの実行前、実行後に行われる処理を指定する。
全てのテストに共通する初期化処理、終了処理を行うときに使用する。

[TestFixture]
public class TestClass
{
    [TestFixtureSetUp]
    public void Init()
    {
        // 初期化処理
    }

    [TestFixtureTearDown]
    public void Terminate()
    {
        // 終了処理
    }

    [Test]
    public void Test1()
    {
        // なんかテスト
    }

    [Test]
    public void Test2()
    {
        // なんかテスト
    }
}

上記の場合、以下の順に実行される

  1. Init()
  2. Test1()
  3. Test2()
  4. Terminate()

SetUpFixture

その名前空間内のTestFixtureの実行前、実行後に行われる処理を記述する。
この属性を指定したクラスでは、SetUp、TearDownしかNUnitの属性を指定できない。

namespace Test
{
    [SetUpFixture]
    public class SetUpClass
    {
        [SetUp]
        public void Init()
        {
            // 初期化処理
        }

        [TearDown]
        public void Terminate()
        {
            // 終了処理
        }
    }

    [TestFixture]
    public class TestClass1
    {
        [SetUp]
        public void Init()
        {
            // 初期化処理
        }
    
        [TearDown]
        public void Terminate()
        {
            // 終了処理
        }
    
        [Test]
        public void Test()
        {
            // なんかテスト
        }
    }

    [TestFixture]
    public class TestClass2
    {
        [SetUp]
        public void Init()
        {
            // 初期化処理
        }
    
        [TearDown]
        public void Terminate()
        {
            // 終了処理
        }
    
        [Test]
        public void Test()
        {
            // なんかテスト
        }
    }
}

上記の場合、以下の順に実行される

  1. SetUpClass.Init()
  2. TestClass1.Init()
  3. TestClass1.Test()
  4. TestClass1.Terminate()
  5. TestClass2.Init()
  6. TestClass2.Test()
  7. TestClass2.Terminate()
  8. SetUpClass.Terminate()