Setup/Teardown 未在 Unity Test Runner 中调用且测试被阻止

Setup/Teardown Not Called In Unity Test Runner & Test Is Blocked

我用谷歌搜索了一下,没有看到其他人有这个问题,所以也许只有我一个人遇到过这个问题。

我使用 Playmode 单元测试套件设置了一个 Unity 测试 运行ner。

但是,如果我尝试 运行 测试其中有 [Setup] 或 [Teardown],则测试根本不会 运行(单击 运行 当然)。我只是得到一个灰色圆圈,没有日志。它确实没有 运行.

如果我删除属性并手动调用方法,一切正常。

对于 [Setup]/[Teardown] 属性导致这种奇怪行为的原因,您有什么建议吗?

下面是一些有效的示例代码并进行了 passing/running 测试:

public class PlayModeUnitTests
{
    Game game;

    void Setup()
    {
        GameObject gameGameObject = MonoBehaviour.Instantiate(Resources.Load<GameObject>("Prefabs/Game"));
        game = gameGameObject.GetComponent<Game>();
    }

    void Teardown()
    {
        Object.Destroy(game.gameObject);
    }

    [UnityTest]
    public IEnumerator MoveDown()
    {
        Setup();
        GameObject obj = game.SpawnObj();
        float initialYPos = obj.transform.position.y;
        yield return new WaitForSeconds(0.1f);

        Assert.Less(obj.transform.position.y, initialYPos);
    }
}

这里是示例代码,它导致测试实际上 运行 甚至不给出错误消息:

 public class PlayModeUnitTests
    {
        Game game;
        [SetUp]
        void Setup()
        {
            GameObject gameGameObject = MonoBehaviour.Instantiate(Resources.Load<GameObject>("Prefabs/Game"));
            game = gameGameObject.GetComponent<Game>();
        }

        [TearDown]
        void Teardown()
        {
            Object.Destroy(game.gameObject);
        }

        [UnityTest]
        public IEnumerator MoveDown()
        {
            GameObject obj = game.SpawnObj();
            float initialYPos = obj.transform.position.y;
            yield return new WaitForSeconds(0.1f);

            Assert.Less(obj.transform.position.y, initialYPos);
        }
    }

如您所见,.dll 上的绿色复选标记显示测试是 运行,但套件中实际测试的 none 通过或失败:

他们需要 public,只是错误不明确

我的问题是,当使用 [UnityTest] 时,拆解必须具有以下内容:

  • 成为[UnityTeardown]
  • 成为public
  • return IEnumerator
[UnityTearDown]
public IEnumerator Teardown()
{
  service.Dispose();
  yield return null;
}