我目前正在使用 Unity 2019 和 C# 开发一款游戏,并为此使用了大量事件和协程。协程是必要的,因为许多计算都是在其中完成的,我不希望游戏在那段时间冻结。现在我开始使用测试运行器(播放模式)编写单元测试,并且协程只是不执行。由于我确实需要确保它们按预期工作,因此不可能仅在“更高级别”进行测试。
我已经尝试过正常的 StartCoroutine() 方法,该方法在测试文件中不起作用(“找不到方法名称”)。此外,我将我的一个协程重构为正常的 void 方法,一切运行良好并且通过了测试。我使用 Visual Studio 调试器来查看它是否跳转到协程执行,但没有。所以问题显然是协程没有执行。我考虑过将计算逻辑移至另一个 void 函数并测试该函数(并省略协程),但我必须确保协程中完成的迭代也能正常工作(它们通常比示例中更复杂)。
这是一个显示一般结构的最小示例(通常需要完成更多计算)。
public class MeasuredValues
{
List<Vector3> slidingWindow; // this is already filled when Normalize() is executed
public IEnumerator Normalize()
{
//find coordinate system origin
Vector3 originPosition = GetOrigin(); // returns a Vector3
//normalization
for (int i = 0; i < slidingWindow.Count; i++)
{
yield return null;
//reset point to be at (0,y,0)
slidingWindow[i] -= originPosition;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在测试文件中我想:
[Test]
public void …Run Code Online (Sandbox Code Playgroud)