2016-09-19 7 views
0

В настоящее время я пытаюсь написать модульные тесты для приложения android/ios, написанного в xamaring, используя mvvmcross. Я следовал инструкциям в wiki и они хорошо работают в момент, когда служба пытается изменить ViewModel таким образом:Mvx.Resolve сбой в модульных тестах

var viewDispatcher = Mvx.Resolve<IMvxViewDispatcher>(); 
viewDispatcher?.ShowViewModel(
new MvxViewModelRequest(typeof(HomeViewModel), null, null, MvxRequestedBy.Unknown)); 

тесты терпят неудачу на первой линии с Mvx.Resolve();. Я предполагаю, что это вплоть до регистрации интерфейсов в макете контейнера IoC:

this.mockDispatcher = new MockDispatcher(); 
this.Ioc.RegisterSingleton<IMvxViewDispatcher>(this.mockDispatcher); 
this.Ioc.RegisterSingleton<IMvxMainThreadDispatcher(this.mockDispatcher); 

так MVX не может решить тогда, когда назвал этот путь. Можно ли проверить этот код или есть ли другая возможность изменить ViewModel из службы?

ответ

4

Я думаю, что ваш AdditionalSetup никогда не будет вызван. Вы должны добавить атрибут SetUp к методу установки и вызвать Setup() из MvxIoCSupportingTest, если вы используете nunit, иначе соответствующий атрибут.

public abstract class MvxTestBase : MvxIoCSupportingTest 
{ 
    protected MockDispatcher mockDispatcher; 

    protected override void AdditionalSetup() 
    { 
     this.mockDispatcher = new MockDispatcher(); 
     this.Ioc.RegisterSingleton<IMvxViewDispatcher>(this.mockDispatcher); 
     this.Ioc.RegisterSingleton<IMvxMainThreadDispatcher>(this.mockDispatcher); 
    } 

    [SetUp] 
    public virtual void SetupTest() 
    { 
     Setup(); 
    } 
} 

Или вы называете это в каждом тесте, как показано здесь: https://mvvmcross.com/docs/testing#section-test-class-declaration-and-setup

+0

битая ссылка, вероятно, эквивалент: https://www.mvvmcross.com/documentation/testing/testing/testing.html – hlovdal

Смежные вопросы