2016-09-19 127 views
0

我目前正在嘗試使用mvvmcross爲使用xamaring編寫的android/ios應用程序編寫單元測試。我緊跟在wiki的說明,他們在服務試圖改變視圖模型這樣做不好事情的一點是: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永遠不會被調用。如果使用nunit,則必須將SetUp屬性添加到設置方法中,並調用Setup()MvxIoCSupportingTest,否則請使用相應的屬性。

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