Сцена тестирования Zenject Unity - как перейти к следующей сцене, правильно обновив контейнер до нового SceneContext? - PullRequest
0 голосов
/ 04 ноября 2018

Как переключить сцену во время теста сцены в классе, расширяющем 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 Ответ

0 голосов
/ 04 ноября 2018

Это проблема с классом 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>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...