我正在尝试学习如何统一进行单元测试,并且遇到了一个奇怪的问题。我怀疑我在早期缺少一些关键的东西,但似乎无法弄清楚我要去哪里。
我创建了一个非常简单的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方法中,以检查它是否也被调用,并且它什么也没做。
我希望两个测试都能通过。
如果实际上这是预期的行为,而没有调用Update,则[UnityTest]有什么用?