環境
Unity2017.4.3f1
一覧
Test
テストメソッドにつける。返り値はvoidでなくてはならない
UnityTest
テストメソッドにつける。Unity専用。IEnumeratorでなくてはならない
SetUp
そのクラスの各テストが開始される前に実行される
TearDown
そのクラスの各テストが終了した後に実行される。SetUp必須
OneTimeSetUp
そのクラスのテストが開始される前に一度だけ実行される
OneTimeTearDown
そのクラスの全てのテストが終了した後に実行される。OneTimeSetUp必須
Order
テストの実行の優先度を指定する。クラス内でのみ有効
Ignore
テストを実行しない
public class Hoge {
[OneTimeSetUp]
public void OneTimeSetUp () {
Debug.Log ("OneTimeSetUp");
}
[OneTimeTearDown]
public void OneTimeTearDown () {
Debug.Log ("OneTimeTearDown");
}
[SetUp]
public void SetUp () {
Debug.Log ("SetUp");
}
[TearDown]
public void TearDown () {
Debug.Log ("TearDown");
}
[Test, Order (20)]
public void Test1 () {
Debug.Log ("Test1");
}
[UnityTest, Order (10)]
public IEnumerator Test2 () {
Debug.Log ("Test2");
yield break;
}
[Test, Ignore ("実行しない理由をここに書く")]
public void Test3 () {
Debug.Log ("Test3");
}
}
実行結果
OneTimeSetUp
SetUp
Test2
TearDown
SetUp
Test1
TearDown
OneTimeTearDown
Values
テストする値を指定する
[Test]
public void Test1 ([Values (1, 2, 3)]int i) {
Debug.Log (i);
// 出力:
// 1
// 2
// 3
}
// boolの場合、Valuesの引数は省略できる
[Test]
public void Test2 ([Values]bool b) {
Debug.Log (b);
// 出力:
// True
// False
}
// 複数の引数にValuesをつけた場合、組み合わせてテストケースを作成する
[Test]
public void Test3 ([Values (1, 2)]int i, [Values(-2, -4)]int j) {
Debug.Log (i + "," + j);
// 出力:
// 1, -2
// 1, -4
// 2, -2
// 2, -4
}
ValueSource
staticフィールドをテストする値として使用する
static int[] testValues = { 1, 2, 3 };
// こっちでも通る
// static int[] testValues {
// get {
// return new [] { 1, 2, 3 };
// }
// }
// こっちでも通る
// static int[] testValues () {
// return new [] { 1, 2, 3 };
// }
[Test]
public void Test ([ValueSource ("testValues")]int i) {
Debug.Log (i);
}
TestCase
引数にそれぞれテストする値を指定する
[Test]
[TestCase (1, 3, 3)]
[TestCase (2, 2, 1)]
[TestCase (3, 3, 3)]
public void Test (int i, int j, int k) {
Debug.Log (i + ", " + j + ", " + k);
// 出力:
// 1,3,3
// 2,2,1
// 3,3,3
}
TestCaseSource
staticフィールドをテストケースとして使用する
static int[][] testCases = {
new [] { 1, 3, 3 },
new [] { 2, 2, 1 },
new [] { 3, 3, 3 }
};
// こっちでも通る
// static int[][] testCases {
// get {
// return new[] {
// new [] { 1, 3, 3 },
// new [] { 2, 2, 1 },
// new [] { 3, 3, 3 }
// };
// }
// }
// こっちでも通る
// static int[][] testCases () {
// return new[] {
// new [] { 1, 3, 3 },
// new [] { 2, 2, 1 },
// new [] { 3, 3, 3 }
// };
// }
[Test, TestCaseSource ("testCases")]
public void Test (int i, int j, int k) {
Debug.Log (i + ", " + j + ", " + k);
// 出力:
// 1,3,3
// 2,2,1
// 3,3,3
}
Range
テストする値を範囲で指定する
// 3 ~ 7 の値で順にテストする
[Test]
public void Test1 ([NUnit.Framework.Range (3, 7)]int i) {
Debug.Log (i);
// 出力:
// 3
// 4
// 5
// 6
// 7
}
// 3 ~ 7 の値で3飛ばしにテストする
[Test]
public void Test2 ([NUnit.Framework.Range (3, 7, 3)]int i) {
Debug.Log (i);
// 出力:
// 3
// 6
}
Random
テストする値をランダムで指定する
// ランダムな値で3回テストする
[Test]
public void Test1 ([Random (3)]int i) {
Debug.Log (i);
}
// -10 ~ 10 のランダムな値で3回テストする
[Test]
public void Test2 ([Random (-10, 10, 3)]int i) {
Debug.Log (i);
}
Combinatorial / Sequential / Pairwise
テストケースの組み合わせ方の指定
- Combinatorial - 全組み合わせパターンでテストする。何も指定しなかった場合はたぶんコレ
- Sequential - 各値を一度ずつ使用するパターンでテストする
- Pairwise - ペアワイズ法でテストする。テストケースの組み合わせパターンを大幅に削減できるらしい(3つ以上の組み合わせの場合のみ)
// 全18パターンの組み合わせでテストする
[Test, Combinatorial]
public void Test1 ([Values (1, 2, 3)]int i, [Values(-2, -4)]int j, [Values ("A", "B", "C")]string s) {
Debug.Log (i + "," + j + "," + s);
// 出力:
// 1,-2,A
// 1,-2,B
// 1,-2,C
// 1,-4,A
// 中略
// 3,-4,C
}
// 全3パターンの組み合わせでテストする
[Test, Sequential]
public void Test2 ([Values (1, 2, 3)]int i, [Values(-2, -4)]int j, [Values ("A", "B", "C")]string s) {
Debug.Log (i + "," + j + "," + s);
// 出力:
// 1,-2,A
// 2,-4,B
// 3,0,C
}
// 全9パターンの組み合わせでテストする
[Test, Pairwise]
public void Test3 ([Values (1, 2, 3)]int i, [Values(-2, -4)]int j, [Values ("A", "B", "C")]string s) {
Debug.Log (i + "," + j + "," + s);
// 出力:
// 1,-2,A
// 1,-4,C
// 1,-4,B
// 2,-2,B
// 中略
// 3,-4,A
}
Repeat
テストを指定した回数繰り返す。途中でテストに失敗したら繰り返しを止める
Retry
テストが失敗したら、指定した回数内で成功するまで再実行する
[Test, Repeat (3)]
public void Test1 () {
Debug.Log ("3回出力される");
}
[Test, Retry (3)]
public void Test2 () {
Debug.Log ("1回だけ出力される");
}
Timeout
指定した時間経過すると処理を中断し、失敗にする
MaxTime
指定した時間経過すると失敗扱いにする。Timeoutと違い、処理は中断されない
// 指定する時間はミリ秒
[TestTest, Timeout (1000)]
public void Test1 () {
yield return new WaitForSeconds (1.5f);
Debug.Log ("テストは失敗し、何も出力されない");
}
// 指定する時間はミリ秒
[Test, MaxTime (1000)]
public IEnumerator Test2 () {
yield return new WaitForSeconds (1.5f);
Debug.Log ("テストは失敗するが、このログは出力される");
}
Datapoint
Theoryで妥当性を検証する変数に付ける
DatapointSource
Theoryで妥当性を検証するフィールドに付ける
Theory
DataPoint,DataPointSourceの妥当性を検証する
[Datapoint]
int testValue1 = 2, testValue2 = 3, testValue3 = 4;
[DatapointSource]
int[] testValues = { 102, 103, 104 };
[DatapointSource]
int[] TestValues {
get {
return new [] { 202, 203, 204 };
}
}
[DatapointSource]
int[] GetTestValues () {
return new [] { 302, 303, 304 };
}
[Theory]
public void Theory (int i) {
// 一桁目が2より大きくないと許さない
Assert.Greater (i % 10, 2);
}
Explicit
個別に実行しない限り実行されない(="Run All"から除外される)
[Test, Explicit]
public void Test () {}
Description
テストの説明文をつける
[Description ("クラスの説明")]
public class Hoge {
[Test, Description ("テストの説明")]
public void Test () {}
}
Category
テストにカテゴリーを指定する。TestRunnerではカテゴリーごとにテストを実行する/しないの指定ができる
[Category ("Scene 1")]
public class Hoge {
[Test, Category ("Scene 1/Phase 1")]
public void Test () {}
}
Platform
テストを実行する環境を制限する。OS、アーキテクチャ、ランタイムを指定できる。カンマ区切りで複数指定可能
// Windows10またはMacOSXでのみテストを実行する
[Platform ("Windows10, MacOsX")]
public class Hoge {
[Test]
public void Test () {}
}