Я пытаюсь научиться юнит-тестированию в единстве и столкнулся со странной проблемой. Я подозреваю, что на ранних стадиях я что-то упускаю, но, похоже, не могу понять, где я ошибаюсь.
Я создал очень простой MonoBehaviour:
public class SimpleMono : MonoBehaviour {
public int frameCount = 0;
// Update is called once per frame
void Update() {
frameCount++;
}
}
Теперь, чтобы проверить, что это работает, я написал два теста. Один проверяет, что frameCount равен нулю первого кадра, а другой проверяет, что frameCount равен 1 2-му кадру. Во втором тесте он возвращает 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 не вызывается, какой смысл использовать [UnityTest]?