[Unity Test Tools][UnitTest] 異なる引数を取るテストを実行する

ヨメレバCSS
オリジナルCSS

テストを作成していると、引数の値と結果は違うけれどもコードは同じ、ということが多くあります。

そういう場合はTestCase属性でまとめて実行できます。

テストケースをまとめて記述する

public int SumInt(int a, int b) {
	return a + b;
}

というメソッドをテストするとき、変更が必要なのはaとbの値、それと結果です。

これを

[Test]
public void SumIntTest() {
	Sample s = new Sample ();
	Assert.AreEqual (2, s.SumInt (1, 1));
	Assert.AreEqual (3, s.SumInt (2, 1));
	Assert.AreEqual (4, s.SumInt (3, 1));
}

というように列挙してテストしてもよいのですが、TestCase属性を使うと

[TestCase(1, 1, Result=2)]
[TestCase(2, 1, Result=3)]
[TestCase(3, 1, Result=4)]
public int SumIntTest(int a, int b) {
	Sample s = new Sample ();
	return s.SumInt (a, b);
}

というようにさらに省くことができます。

TestCaseで指定した値をメソッドの引数に順に当てはめていき、テスト用メソッドの戻り値をResultと比較することでテストを行っています。

TestRunnerには次のように、TestCaseが一つづつ表示されています。

UnityTestTools_1_4_testcase

配列を使用する

とはいえ列挙するのもめんどくさい。そういうときには、TestCaseSource属性を使用することで配列を指定することができます。

private static object[] sum_params = 
{
	new object[]{ 1, 1, 2 }, 
	new object[]{ 2, 1, 3 }, 
	new object[]{ 3, 1, 4 }, 
};

というように値を列挙したstatic変数を用意し、

[TestCaseSource("sum_params")]
public void SumIntTest(int a, int b, int result) {
	Sample s = new Sample ();
	Assert.AreEqual (result, s.SumInt (a, b));
}

とTestCaseSourceで指定します。

UnityTestTools_1_4_testcasesource

すると、このようになります。

object[]に指定したパラメータが、引数に順に格納されている感じですね。

IEnumratableを指定する

さらに、このデータソースとしてIEnumratableを指定することもできます。

この場合はプロパティとして定義します。

private static IEnumerable sum_params {
	get {
		yield return new TestCaseData(1, 1).Returns(2);
		yield return new TestCaseData(2, 1).Returns(3);
		yield return new TestCaseData(3, 1).Returns(4);
	}
}

というように。

TestCaseDataオブジェクトのコンストラクタにパラメータを指定し、Returnsで戻り値を指定します。

こちらの場合は、戻り値がint型のテストメソッドが使用でき、

[TestCaseSource("sum_params")]
public int SumIntTest(int a, int b) {
	Sample s = new Sample ();
	return s.SumInt (a, b);
}

と書くことができます。

IEnumrableでは値を戻すためにコードを書くことができるので、より柔軟にテスト用の値が生成できます。

スポンサーリンク
GoogleAdSence レクタングル(大)

シェアする

スポンサーリンク
GoogleAdSence レクタングル(大)