NUnit Attributes CheetSheet
Unity Test Framework(UTF)で使われているNUnitの属性を分かる範囲でまとめてみる.
[TestFixture]
テスト・メソッドを含むクラスにつける属性だが, Unityの場合は必要と思われる.
[Test]
主にエディタ・モードで使われる. メソッドに付けて単体テストとして実行する.[1]
[Test]
public void TestSample() {
// write your own test
}
[UnityTest]
UTFで追加された属性で主にプレイ・モード・テストで利用する. フレームを飛ばすことで実際にゲームの流れを再現できる.
// A UnityTest behaves like a coroutine in Play Mode. In Edit Mode you can use
// `yield return null;` to skip a frame.
[UnityTest]
public IEnumerator SampleWithEnumeratorPasses() {
// Use the Assert class to test conditions.
// Use yield to skip a frame.
yield return null;
}
[SetUp]
テスト・ケース共通の処理を記述する. OneTimeSetUpやTestFixtureSetUpというのもある.
[SetUP]
public void SetUp() {
// write setup process
}
[teardown]
テスト・ケース共通の後処理を記述する. OneTimeTearDownやTestFixtureTearDownというのもある.
[TearDown]
public void Cleanup() {
// write cleanup process
}
[Ignore]
この属性をつけたメソッドは実行されない. 理由と期限を設定することもできる.
[Test]
[Ignore("Write a reason why skip this test", Until = "2014-07-31 12:00:00Z")]
public void IgnoredTest() {
// write your own test
}
[TestCase]
テストケースを記述できる. ExpectedResultという名前付きパラメータを指定するとアサートもいらなくなり, テストコード中に実行結果をexpectという変数で持ち必要がなくなる.
[TestCase(12, 3, 4)]
[TestCase(12, 2, 6)]
[TestCase(12, 4, 3)]
public void DivideTest(int n, int d, int q)
{
Assert.AreEqual(q, n / d);
}
[TestCaseSource]
別に指定したソースをテスト・ケースとして利用できる.
public class MyTestClass
{
[TestCaseSource(nameof(DivideCases))]
public void DivideTest(int n, int d, int q)
{
Assert.AreEqual(q, n / d);
}
static object[] DivideCases =
{
new object[] { 12, 3, 4 },
new object[] { 12, 2, 6 },
new object[] { 12, 4, 3 }
};
}
Parameterized Tests
[Range]
引数に数列を指定できる. 下の例では二つのRange属性が指定されている. この場合組み合わせ的に実行される.
[Test]
public void RectArea([Range(-2, 2)] float x, [Range(-2, 2)] float y) {
}
[Random]
ランダムな値をパラメータとして指定する.
[Test]
public void RandomizedTest([Random(1, 10, 5) int randomizedParam]) {
}
[Values]
指定した値をテストのパラメータとして渡す.
[Test]
public void TestValues([Values(1, 2, 3)] int x) {
}
あるいは他のパラメータ化テスト属性と一緒に使うことで組み合わせ的な[2]テストケースを指定できる.
[Test]
public void TestCombo([Values(1, 2, 3)] int x, [Random(1, 5, 2) int n]) {
}
[Sequential]
テストケースを順番に実行する.
[Test, Sequential]
public void TestCombo([Values(1, 2, 3)] int x, [Values(1, 5) int n]) {
}
すなわち
x | n |
---|---|
1 | 1 |
2 | 5 |
3 | null |
となる. 対応する数値がない場合はnullになる.
[Combinatorial]
テストケースを組み合わせ的に生成する.
[Test, Combinatorial]
public void TestCombo([Values(1, 2, 3)] int x, [Values(1, 5) int n]) {
}
[Pairwise]
可能なペアをテストケースとして生成する[3].
[Test, Pairwise]
public void TestCombo([Values(1, 2, 3)] int x, [Values(1, 5) int n]) {
}
[Repeat]
テストの繰り返し回数を指定する.
[Test, Repeat(5)]
public void TestSeveralTimes() {
}
[MaxTime]
テストに"時間切れ"を設定できる. 指定したミリ秒を超えた場合失敗と見なされる.
[Test, MaxTime(2000)]
public void TimedTest()
{
/* ... */
}
[Retry]
テストが失敗した場合のやり直す回数を指定できる. 最初の失敗したテストを含む回数を指定する.
[Test, Retry(2)]
public void TestRetryOnceAfterFailed() {
}
[Order]
テストの順番を指定できる.
[Test, Order(1)]
public void TestA() {}
[Test, Order(2)]
public void TestB() {}
[Theory]
良く分からない.
[Author]
作者の名前と電子メールを指定できる.
[Test]
[Author("brainvader", "brainvade@gmail.com")]
public void OresamanoTest() {
// This is my test
}
[Description]
テストの説明を書ける.
[Test, Description("Simple Test")]
public void TestSimpleMethod() {
// write a simple test
}
[Category]
テストをカテゴリでまとめることができる. 指定したカテゴリはUnityのTest Runnerウィンドウから選択できる. カテゴリに該当するテストだけが表示され実行できる.
[Test, Category("LongTest")]
public void Test1() {}
[Test, Category("ShortTest")]
public void Test2() {}
Reference
注釈
-
Setup and cleanup at build timeで使われているがまだ読んでない. ↩︎
-
Combinatorialと表現されている数学的な意味では順列と思われる. ↩︎
-
こっちがいわゆる組み合わせである. ↩︎
Discussion