Сцена тестирования Zenject Unity - как перейти к следующей сцене, правильно обновив контейнер до нового SceneContext?
Как переключить сцену во время теста сцены, в классе, расширяющем SceneTestFixture?
Мне нужно создать тестовый пример при расширении SceneTestFixture, где во время теста я загружаю сцену 'A', и она устанавливает условие для ProjectContext, а затем в том же тестовом переключателе на сцену 'B' и заставляет его проверить, установлено ли условие на "А", если не вернуться к "А".
Если я попытаюсь выполнить LoadScene() в соответствии с документацией Zenject, я не смогу повторно использовать ее для перехода к следующей сцене. Добавочная загрузка - это не то, что мне нужно, поэтому не следует использовать 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 здесь, но я не мог понять, как перезагрузить Контейнер в новый SceneContext?
1 ответ
Это проблема с классом 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>();