2016-09-19 1 views
0

Ich versuche derzeit, Komponententests für eine Android/IOS-Anwendung zu schreiben, die in xamaring mit mvvmcross geschrieben wurden. Ich habe die Anweisungen in den wiki gefolgt und sie funktionieren gut auf den Punkt, wenn ein Dienst das Ansichtsmodell auf diese Weise zu ändern versucht:Mvx.Resolve schlägt in Komponententests fehl

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

Die Tests scheitern in der ersten Zeile mit Mvx.Resolve();. Ich nehme an, dies ist bis auf die Schnittstellen in den Mock-IoC-Containern registriert:

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

so MVX nicht dann, wenn auf diese Weise aufgerufen auflösen kann. Kann dieser Code getestet werden oder gibt es eine andere Möglichkeit, das ViewModel vom Dienst zu ändern?

Antwort

4

Ich denke, Ihre AdditionalSetup wird nie aufgerufen. Sie müssen das Attribut SetUp zu einer Setup-Methode hinzufügen und die Setup() von MvxIoCSupportingTest aufrufen, wenn Sie nunit verwenden, andernfalls das entsprechende Attribut.

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(); 
    } 
} 

Oder Sie nennen es in jedem Test, wie hier gezeigt: https://mvvmcross.com/docs/testing#section-test-class-declaration-and-setup

+0

Toten Link, wahrscheinlich äquivalent: https://www.mvvmcross.com/documentation/testing/testing/testing.html – hlovdal