包含此页的版本:
不含此页的版本:
这[UnitySetUp]和[UnityTearDown]属性等同于 NUnit[SetUp]和[TearDown]属性,但它们允许为 Unity 编辑器提供指令。这[UnitySetUp]和[UnityTearDown]属性需要返回类型 IEnumerator。
这[UnityOneTimeSetUp]和[UnityOneTimeTearDown]属性等同于 NUnit[OneTimeSetUp]和[OneTimeTearDown]属性,但它们允许为 Unity 编辑器提供指令。这[UnityOneTimeSetUp]和[UnityOneTimeTearDown]属性需要返回类型 IEnumerator。
有关更多信息和使用示例,请参阅相应的 API 参考[UnitySetUp],[UnityTearDown],[UnityOneTimeSetUp]和[UnityOneTimeTearDown].
[UnitySetUp]和[UnityTearDown]可以与[Test]或[UnityTest]test 属性。在这两种情况下,Unity 和非 Unity 的相对执行顺序[SetUp]和[TearDown]属性是相同的。唯一的区别是[UnityTest]允许在测试期间产生可能导致域重新加载的指令,在这种情况下,非 Unity[SetUp]在继续测试的第二部分之前重新运行方法。
执行顺序中的术语 base 表示测试类从中继承的基类。UnitySetUp和UnityTearDown遵循与 NUnit 相同的模式SetUp和TearDown属性来确定基类及其派生项之间的执行顺序。SetUp首先在基类上调用方法,然后在派生类上调用方法。TearDown首先在派生类上调用方法,然后在基类上调用方法。有关更多信息,请参阅 NUnit 文档。
以下示例演示了基类和派生类。您可以通过控制台中打印的消息顺序来验证执行顺序:
public class BaseClass
{
[OneTimeSetUp]
public void OneTimeSetUp()
{
Debug.Log("OneTimeSetUp Base");
}
[SetUp]
public void SetUp()
{
Debug.Log("SetUp Base");
}
[UnitySetUp]
public IEnumerator UnitySetUp()
{
Debug.Log("UnitySetup Base");
yield return null;
}
[TearDown]
public void TearDown()
{
Debug.Log("TearDown Base");
}
[UnityTearDown]
public IEnumerator UnityTearDown()
{
Debug.Log("UnityTearDown Base");
yield return null;
}
}
public class DerivedClass: BaseClass
{
[OneTimeSetUp]
public new void OneTimeSetUp()
{
Debug.Log("OneTimeSetUp");
}
[SetUp]
public new void SetUp()
{
Debug.Log("SetUp");
}
[UnitySetUp]
public new IEnumerator UnitySetUp()
{
Debug.Log("UnitySetup");
yield return null;
}
[Test]
public void UnitTest()
{
Debug.Log("Test");
}
[UnityTest]
public IEnumerator UnityTest()
{
Debug.Log("UnityTest before yield");
yield return null;
Debug.Log("UnityTest after yield");
}
[TearDown]
public new void TearDown()
{
Debug.Log("TearDown");
}
[UnityTearDown]
public new IEnumerator UnityTearDown()
{
Debug.Log("UnityTearDown");
yield return null;
}
[OneTimeTearDown]
public void OneTimeTearDown()
{
Debug.Log("OneTimeTearDown");
}
}
编辑模式测试可以生成导致域重新加载的指令。在域重新加载时,所有非 Unity作(例如OneTimeSetup和Setup) 重新运行,然后启动域重新加载的代码继续。Unity作(例如UnitySetup)不会重新运行。如果 Unity作是启动域重新加载的代码,则UnitySetup方法在域重新加载后运行。
以下示例演示了域重新加载的基类和派生类:
public class BaseClass
{
[OneTimeSetUp]
public void OneTimeSetUp()
{
Debug.Log("OneTimeSetUp Base");
}
[SetUp]
public void SetUp()
{
Debug.Log("SetUp Base");
}
[UnitySetUp]
public IEnumerator UnitySetUp()
{
Debug.Log("UnitySetup Base");
yield return null;
}
[TearDown]
public void TearDown()
{
Debug.Log("TearDown Base");
}
[UnityTearDown]
public IEnumerator UnityTearDown()
{
Debug.Log("UnityTearDown Base");
yield return null;
}
}
public class DerivedClass: BaseClass
{
[OneTimeSetUp]
public new void OneTimeSetUp()
{
Debug.Log("OneTimeSetUp");
}
[SetUp]
public new void SetUp()
{
Debug.Log("SetUp");
}
[UnitySetUp]
public new IEnumerator UnitySetUp()
{
Debug.Log("UnitySetup");
yield return null;
}
[Test]
public void UnitTest()
{
Debug.Log("Test");
}
[UnityTest]
public IEnumerator UnityTest()
{
Debug.Log("UnityTest before yield");
yield return new EnterPlayMode();
//Domain reload happening
yield return new ExitPlayMode();
Debug.Log("UnityTest after yield");
}
[TearDown]
public new void TearDown()
{
Debug.Log("TearDown");
}
[UnityTearDown]
public new IEnumerator UnityTearDown()
{
Debug.Log("UnityTearDown");
yield return null;
}
[OneTimeTearDown]
public void OneTimeTearDown()
{
Debug.Log("OneTimeTearDown");
}
}