しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

UnitTest のメソッドをデータだけ変更して流用する

コードによる自動テストを作成する場合、テストコードのロジックは共通であっても入力データが異なることがあります

こういった場合は下記のように冗長にメソッドを分けて作ることが多いと思います

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        try
        {
            string target = default(string);
            Debug.WriteLine(target.ToString());
        }
        catch (Exception)
        {
            Assert.Fail();
        }
    }

    [TestMethod]
    public void TestMethod2()
    {
        try
        {
            string target = null;
            Debug.WriteLine(target.ToString());
        }
        catch (Exception)
        {
            Assert.Fail();
        }
    }

    [TestMethod]
    public void TestMethod3()
    {
        try
        {
            string target = "";
            Debug.WriteLine(target.ToString());
        }
        catch (Exception)
        {
            Assert.Fail();
        }
    }
}

実はストアアプリの場合、上記のコードは下記のように書き換えることができます

[TestClass]
public class UnitTest1
{
    [TestMethod]
    [DataTestMethod]
    [DataRow(default(string), DisplayName = "default-test")]
    [DataRow(null, DisplayName = "null-test")]
    [DataRow("", DisplayName = "empty-test")]
    public void TestMethod1(string param1)
    {
        try
        {
            Debug.WriteLine(param1.ToString());
        }
        catch (Exception)
        {
            Assert.Fail();
        }
    }
}

このように書いた場合でも、テスト結果でも次のように表示され区別できるので便利です

f:id:matatabi_ux:20140330153500p:plain