Как использовать ZenjectIntegrationTestFixture? и в чем разница между ним и ZenjectSceneTestFixture? - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть следующий контроллер для тестирования, который наследует MonoBehaviour Class и является частью OrderApp, который также является Monobehaviour. Кроме того, необходимо создать экземпляр приложения, чтобы получить доступ к переменным-членам View (при проверке, что base.RegisterRecording вызывался с правильнымаргументы)

Сначала я попытался использовать ZenjectUnitTestFixture, но потерпел неудачу, потому что не смог создать экземпляр игрового объекта приложения в режиме редактирования. Поэтому после поиска я обнаружил, что ZenjectIntegrationTestFixture используется для режима воспроизведения, поэтому я могу создать игровой объект для приложения

Как вы можете видеть в функции теста.когда я запускаю этот метод testMethod, он не работает в PreInstall (), когда Assert.That (! ProjectContext.HasInstance);

Почему не получается?Я неверный подход?

Также я не могу найти хорошую документацию для PreInstall и PostInstall о том, что они делают и как они работают

public class OrderApp : BaseApp
{
    public OrderView View;
    public OrderController Controller;
    protected override void Awake()
    {
        base.Awake();
    }
    protected override void Start()
    {
        base.Start();
    }
    protected override void Update()
    {
        base.Update();
    }
}

public class OrderController : BaseController
{
    Dependency1 obj1;
    Dependency2 obj2;
    Dependency3 obj3;
    public OrderApp  App
    {
        get { return FindObjectOfType<OrderApp>(); }
    }
    [Inject]
    public void Initialize(D1 ,D2,D3)
    {
        obj1= D1;
        obj2= D2;
        obj3= D3;
    }
    public override void Start()
    {
        base.Start();
        base.RegisterRecording(App.View.Recorder,App.View.Player);
        obj2.AddSubscriber(this);
        GetOrder();
    }
}
public class TestOrderContollerPlayMode : ZenjectIntegrationTestFixture
{
     OrderApp testApp;

     [UnityTest]
     public IEnumerator RunTest1()
     {
         #region Arrange
         var orderViewMock = new Mock<OrderView>();
         ZenjectLocator.Container.Bind<OrderView>().FromInstance(orderViewMock .Object);

         var dependency1Mock = new Mock<Dependency1>();
         var dependency2Mock = new Mock<Dependency2>();
         var dependency3Mock = new Mock<Dependency3>();

         OrderController controller = new OrderController();
         controller.Initialize(dependency1Mock.Object, dependency1Mock.Object, dependency1Mock.Object);

         #endregion

         PreInstall();

         ZenjectLocator.Container.Bind<OrderController>().FromInstance(controller).AsSingle();

         PostInstall();

         #region Act 

         GameObject testObject = GameObject.Instantiate(new GameObject());
         testObject.AddComponent<OrderApp>();
         testApp = testObject.GetComponent<kOrderApp>();

         #endregion

         #region Assert

         Assert.NotNull(testApp.Controller.App.View.Recorder);
         voiceRecorderMock.Verify(vrm => vrm.RegisterForVoiceRecording (It.Is<Dependency1>(ar => RecorderMatch(ar, controller.App.View.Recorder)),It.Is<AudioPlayer>(ap => PlayerMatch(ap, controller.App.View.SpeechPlayer)), Times.Once);

         #endregion

         yield break;
     }

     bool RecorderMatch(AudioRecorder ar, AudioRecorder speechRecorder)
     {
         return ar.Equals(speechRecorder);
     }

     bool PlayerMatch(AudioPlayer ap, AudioPlayer speechPlayer)
     {
         return ap.Equals(speechPlayer);
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...