Unity TestRunner не вызывает Update () в тестовом режиме редактирования - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь научиться юнит-тестированию в единстве и столкнулся со странной проблемой. Я подозреваю, что на ранних стадиях я что-то упускаю, но, похоже, не могу понять, где я ошибаюсь.

Я создал очень простой 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") в метод обновления, чтобы проверить, вызывался ли он также и ничего не делал.

test runner output

Я бы ожидал, что оба теста пройдут.

Если на самом деле это предполагаемое поведение, когда Update не вызывается, какой смысл использовать [UnityTest]?

...