1

如何在场景测试期间在扩展 SceneTestFixture 的类中切换场景?

我需要在扩展 SceneTestFixture 时制作一个测试用例,在测试期间我加载场景“A”并将条件设置为 ProjectContext,然后在同一个测试中切换到场景“B”并让它测试条件是否已设置按'A',如果不返回'A'。

如果我按照 Zenject 文档尝试 LoadScene(),那么我不能重用它来切换到下一个场景。加载添加剂不是我需要的,所以不要使用LoadScenes(),如果我使用LoadScene()加载'A',然后通过标准Unity SceneManager切换到另一个场景,那么SceneContainer不会更新到新场景而且我不知道如何更新它。这是我的代码如何失败和流程的示例:

yield return LoadScene("SceneA");
AClass aclass = Container.Resolve...
Assert.IsNotNull(aclass);// and I can access this aclass, but then:
aclass.OnChange_SceneB();// in scene 'A' switch by standard Unity SceneManager
yield return null;
BClass bclass = Container.Resolve...// I expected that Container will auto-update, but...
// error: resolve failed!

我在这里找到了 SceneTestFixture的来源,但我不知道如何将 Container 重新加载到新的 SceneContext?

4

1 回答 1

2

这是 Zenject 的 SceneTestFixture 类的问题。它假设当前场景在运行时不会改变。我在这里添加了一个问题。同时,您可以通过执行以下操作获取当前场景的场景上下文:

yield return LoadScene("FirstScene");

yield return new WaitForSeconds(2.0f);

var newSceneContainer = ProjectContext.Instance.Container.Resolve<SceneContextRegistry>()
    .SceneContexts.Single().Container;

newSceneContainer.Resolve<Foo>();
于 2018-11-04T19:07:28.017 回答