Unity TestRunner在编辑模式测试中不调用Update()

时间:2019-04-24 21:30:33

标签: c# unit-testing unity3d tdd gameobject

我正在尝试学习如何统一进行单元测试,并且遇到了一个奇怪的问题。我怀疑我在早期缺少一些关键的东西,但似乎无法弄清楚我要去哪里。

我创建了一个非常简单的MonoBehaviour:

public class SimpleMono : MonoBehaviour {

    public int frameCount = 0;

    // Update is called once per frame
    void Update() {
        frameCount++;
    }
}

现在尝试测试该方法是否有效,我编写了两个测试。一个测试第一个帧的frameCount为零,另一个测试第二个帧的frameCount为1。在第二个测试中,它返回return null,然后断言。由于yield return null使它转到下一帧。因此,应该经过一帧调用更新方法。

public class NewTestScript
{

    [UnityTest]
    public IEnumerator frame0test() {
        SimpleMono simpleMono = new GameObject().AddComponent<SimpleMono>();
        simpleMono.frameCount = 0;

        Assert.AreEqual(0, simpleMono.frameCount);
        yield return null;
    }

    [UnityTest]
    public IEnumerator frame1test() {

        SimpleMono simpleMono = new GameObject().AddComponent<SimpleMono>();
        simpleMono.frameCount = 0;

        yield return null;

        Assert.AreEqual(1, simpleMono.frameCount);

    }
}

但是,Test1通过了,而test2没有通过。两种测试均未调用更新。我尝试将Debug.Log(“ FRAME FIRED”)语句放在update方法中,以检查它是否也被调用,并且它什么也没做。

test runner output

我希望两个测试都能通过。

如果实际上这是预期的行为,而没有调用Update,则[UnityTest]有什么用?

0 个答案:

没有答案