Zenject Unity 测试场景 - 如何导航下一个场景,将容器正确更新到新的 SceneContext?

Zenject Unity testing scene - how navigate next scene, having container updated to new SceneContext properly?

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

我需要在扩展 SceneTestFixture 时制作一个测试用例,在测试期间我加载 Scene 'A' 并将条件设置为 ProjectContext 然后在同一测试中切换到 Scene 'B' 并让它测试是否条件由 'A' 设置,如果不是 return 返回 '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 here 的源代码,但我不知道如何将容器重新加载到新的 SceneContext?

这是 Zenject 的 SceneTestFixture class 的问题。它假定场景当前不会在运行时发生变化。我为它添加了一个问题 here。同时,您可以通过执行以下操作来获取当前场景的场景上下文:

yield return LoadScene("FirstScene");

yield return new WaitForSeconds(2.0f);

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

newSceneContainer.Resolve<Foo>();