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;
}
我用谷歌搜索了一下,没有看到其他人有这个问题,所以也许只有我一个人遇到过这个问题。
我使用 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;
}