2016-12-08 3 views
0

Ich erstelle eine Xamarin.Forms App und möchte mit UITest das korrekte Verhalten meiner Ansicht testen. Die Ansicht reagiert nicht nur auf Benutzereingaben wie Knopfdruck oder Ähnliches. Stattdessen gibt es Hintergrundoperationen, die zu Änderungen in der Ansicht führen sollten, wie das Ausblenden eines Elements und das Anzeigen eines anderen Elements an dieser Stelle. Ein anderes Beispiel ist das Füllen eines ListView mit Elementen, die durch eine Hintergrundoperation erzeugt würden. Diese Änderungen würden am ViewModel vorgenommen, dessen Eigenschaften an View gebunden sind. Jetzt möchte ich die Hintergrundoperation simulieren und testen, dass sich meine Ansicht korrekt verhält. Aber ich kann mein ViewModel nicht im UITest-Projekt bearbeiten, weil ich in der Test-Klasse nicht auf Xamarin.Forms verweisen kann. Es scheint, als ob es nicht beabsichtigt ist, die Anwendung auf diese Weise zu testen. Die gesamte App ist eine Blackbox für das UITest und Sie können nur mit Maus und Tastatur interagieren. Wie kann ich auf Interna meiner App zugreifen, das entsprechende ViewModel zum Beispiel. Ich habe schon nach diesem Problem gesucht, aber nichts gefunden. Vielleicht suche ich in die falsche Richtung. Jede Hilfe würde sehr geschätzt werden.Wie fälsche ich Hintergrundaktivität während der Verwendung von Xamarin.UITest

Antwort

0

Sie können über eine Hintertür auf eine Methode in einem Plattformprojekt zugreifen, und von dort aus sollten Sie auf Formularcode zugreifen können, da Ihr App-Projekt auf das Kernprojekt von Forms verweist. Siehe: https://developer.xamarin.com/guides/testcloud/uitest/working-with/backdoors/

erstellen Backdoor-Methode in Android-Projekt:

In MainActivity:

[Export("MyBackdoorMethod")] 
// Can optionally take a parameter of string, int, or bool. 
// Can optionally return string or Java.Lang.String. 
public void MyBackdoorMethod() 
{ 
    // In through the backdoor - do some work. 
} 

Um die Android-Backdoor-Methode von einem Test zu nennen:

app.Invoke("MyBackdoorMethod"); 

Backdoor-Methode erstellen in iOS Projekt:

In AppDelegate:

[Export("myBackdoorMethod:")] // notice the colon at the end of the method name 
// Must take an NSString and return an NSString. 
public NSString MyBackdoorMethod(NSString value) 
{ 
    // In through the backdoor - do some work. 
} 

Um die iOS-Backdoor-Methode von einem Test nennen:

app.Invoke("myBackdoorMethod:", "the value"); 

Weitere Details auf den Link, aber das sollte man in Gang bringen ausreichen.

+0

OK danke. Dies ist ein bisschen umständlich, aber scheint der Weg zu gehen. Und ist es umgekehrt? Wenn meine UI-Steuerung einen ICommand initiiert, der nicht erneut auf der Benutzeroberfläche angezeigt wird. Ich denke, ich kann nicht Test in der Backdoor-Methode behauptet, kann ich? –

+0

Nein, Sie können nicht die Berechtigungen im Plattformcode haben, aber Sie können etwas von der Backdoor-Methode zurückgeben, gegen die Sie testen können. – jgoldberger

Verwandte Themen