У меня есть следующий контроллер для тестирования, который наследует 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);
}
}