包含此页的版本:
不含此页的版本:
在本节中,您将学习如何调用和等待域重新加载。
执行影响脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
请参阅术语表在项目中,Unity 会执行域重新加载。由于域重新加载会重新启动所有脚本,因此有必要通过生成WaitForDomainReload.该命令会停止任何进一步的代码执行,然后在域重新加载完成后恢复。
也可以产生一个RecompileScripts命令。这与WaitForDomainReload除了它执行AssetDatabase.Reload()叫。这两个调用都可以配置为预期脚本编译是否成功。
如果在测试运行时发生域重新加载而没有产生这些命令之一,则测试将失败,并显示有关意外域重新加载的错误。
示例 13_DomainReload_Solution使用名为ScriptAddingTests.
该测试已经实现了两个辅助方法:
CreateScript创建一个 C# 脚本,其中包含一个名为MyTempScript.它有一个名为Verify.
VerifyScript实例化MyTempScriptusing reflection 并返回Verify方法。预期的返回值是字符串“OK”。
运行后CreateScriptUnity 现在在项目中有一个新的 C# 文件,因此需要重新编译。任务是创建一个测试,该测试调用CreateScript,处理域重新加载,然后验证来自VerifyScript.
请记住,您的脚本也应该通过删除文件并再次重新编译脚本来自行清理。建议在TearDown或UnityTearDown,即使测试失败,它也会运行。
重要提示:导入后,应移动示例测试文件夹
Tests_13进入Assets文件夹中,以便本练习正常工作。
RecompileScripts由于它是内部的,因此您无法使用,那么您需要将 Unity 测试框架包升级到 1.1.0 或更高版本。示例中提供了完整的解决方案13_DomainReload_Solution.
测试可以按如下方式实现:
internal class ScriptAddingTests
{
private const string k_fileName = @"Assets\\Tests\\TempScript.cs";
[UnityTest]
public IEnumerator CreatedScriptIsVerified()
{
CreateScript();
yield return new RecompileScripts();
var verification = VerifyScript();
Assert.That(verification, Is.EqualTo("OK"));
}
[UnityTearDown]
public IEnumerator Teardown()
{
if (!File.Exists(k_fileName))
{
yield break;
}
File.Delete(k_fileName);
yield return new RecompileScripts();
}
private void CreateScript()
{
File.WriteAllText(k_fileName, @"
public class MyTempScript {
public string Verify()
{
return ""OK"";
}
}");
}
private string VerifyScript()
{
Type type = Type.GetType("MyTempScript", true);
object instance = Activator.CreateInstance(type);
var verifyMethod = type.GetMethod("Verify", BindingFlags.Instance | BindingFlags.Public);
var verifyResult = verifyMethod.Invoke(instance, new object[0]);
return verifyResult as string;
}
}