小编Nal*_*ara的帖子

如何在 Unity Test Runner 中测试 Unity 协程

我目前正在使用 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)

c# unit-testing coroutine unity-game-engine test-runner

5
推荐指数
1
解决办法
3732
查看次数