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

时间:2018-11-03 22:42:25

标签: unity3d integration-testing zenject

在扩展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 here的源头,但是我不知道如何将Container重新加载到新的SceneContext?

1 个答案:

答案 0 :(得分:1)

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

yield return LoadScene("FirstScene");

yield return new WaitForSeconds(2.0f);

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

newSceneContainer.Resolve<Foo>();