Erste Erfahrungen mit Xamarin UI Tests – Android Quick Start

Ich habe der Xamarin UI Tests – Android Quick Start durchgeführt und in diesem Blog schreibe ich über meine Erfahrung vom Nichtswisser zum ersten Erfolgreichen Test.

Wie bin ich auf Xamarin UI Tests gekommen?

Ich habe in ein Projekt die Aufgabe bekommen, die Möglichkeiten im Raum UI Tests für unsere Xamarin Applikationen anzuschauen. Ich habe mich natürlich direkt auf Xamarin Test Clouds Webseite gestürzt.
Habe aber schnell gemerkt, dass ich diese Option für die Zukunft auf die Seite legen muss, da wir momentan kein kostenpflichtiges Abonnent abschliessen möchten.

UI Tests ohne Xamarin Test Cloud möglich?

Ich habe dann weiter geschaut, wie wir die Xamarin UI Tests ohne der Cloud Funktion benutzten konnten und habe ziemlich schnell gemerkt, dass es eigentlich ganz einfach funktioniert und man genau so gut auf ein Physisches Gerät oder ein Emulator laufen kann.

Hat jemand ein Test Recorder erwähnt?

Als ich irgendwann von ein Test Recorder gehört habe, begann ich mit viel Neugier nach diesem magischen Tool zu suchen. Ich fand ihn auch ziemlich schnell, wurde aber genau so schnell wieder enttäuscht, der Xamarin Test Recorder funktioniert momentan (22.09.2017) ausschliesslich mit Visual Studio Enterprise und ich habe nur Professional auf meinem Rechner.
Ich habe auch im nachhinein von einer Mitarbeiter mitbekommen, dass er nicht so gute Erfahrungen mit dem Recorder gemacht hat und hat mich geraten, bis weiteres die Tests von Hand zu schreiben.

Also gut, ich weiss was ich machen will, wo fange ich an?

Als erstes habe ich die Grundlagen in der Xamarin Dokumentation ein bisschen besser kennengelernt. Hier fand ich wichtige Informationen, wie Requirements und bekam ein erster Einblick in der Syntax vom UI.Tests API.

Link: Xamarin UI Tests – Introduction

Also los, kommen wir endlich zum Visual Studio

In der Xamarin UI Tests Dokumentation haben sie Tutorials für Android sowie iOS. Ich habe mich entschieden mit Android anzufangen.
Wichtig ist hier, dass man vor dem Anfangen alle Requirements gut durchliest und die benötigte Software installiert.

Link: Xamarin UI Tests – Quick Starts – Überblick und Requirements

So schnell wir den Requirements installiert haben, können wir mit dem Tutorial anfangen.

Ich habe für den Tutorial folgender Setup benutzt:

  • Visual Studio: Visual Studio 2017 15.3
  • Test Gerät: Physisches Gerät – Samsung S7 (Android 7.0)
  • Test Runner: JetBrains ReSharper Ultimate 2017.2
  • OS: Windows 10

Link: Xamarin UI Tests – Android Quick Start

Schwierigkeiten beim “Creating the First Test”:

Leider, wie es so gewöhnlich ist, konnte ich den Tutorial nicht ganz 1 zu 1 nachmachen, da ich an ein paar Schwierigkeiten gestossen bin.

No Tests found

NoTestsFound

Im Tutorial steht, dass man die Tests durch “Test -> Run -> All Tests” laufen sollte.
Wenn ich das gemacht habe, konnte Visual Studio jedoch keine Tests finden.
Ich vermute, dass es funktionieren würde, wenn ich den NUnit Test Adapter for NUnit 2 statt ReSharper als Test Runner benutzt hätte.

Wenn du aber auch den ReSharper benutzt, starte den Tests statt wie im Tutorial, durch “ReSharper -> Unit Tests -> Run Unit Tests” oder durch “Rechtsklick -> Run Unit Tests”.

Android SDK not Found

SdkNotFound

Dieser Fehler war recht einfach zu lösen, da der Stacktrace mir genau gesagt hat, was gefehlt hat. Nämlich die Environment Variable “ANDROID_HOME”.
Ich habe die Android SDK in der Tools -> Options -> Xamarin -> Android Settings schon verlinkt, jedoch benutzt der “Resharper Test Runner” nicht dieser Einstellung, stattdessen geht er diesen Pfad in den Environment Variablen holen.

Hier ein Link, falls du nicht weisst, wo man eine Environment Variable hinzufügt:
SuperUser.com – Antwort auf “How do I set Environment Variables in Windows 10”

ApkFile or InstalledApp has not been configured

ApkFileNotConfigured

Diesen Fehler war ein bisschen schwieriger zu beheben, aber zum Glück fand ich eine Lösung auf Xamarin Forums von Xamarin Team Mitglied TomOpgenorth.
Bei der Frage geht es eigentlich um Native Android Apps und nicht Xamarin.Android Apps, aber die Lösung ist genau die Selbe wie bei Xamarin.Android.

Link: How to run Xamarin UI Tests on Android Native

TomOpgenorthAnswer.png

Wenn wir den Code nur ein bisschen nach unsere Solution anpassen, funktioniert der Code und wir können den REPL anzeigen lassen.

pathToApkWithChanges

ReplWorking

Allgemeiner Eindruck

Xamarin UI Tests sehen ganz schon cool aus und ich werde mich genauer mit diesen Tema auseinandersetzten.
Ich bin sehr gespannt was für Möglichkeiten es gibt mit sowie ohne Xamarin Test Cloud und was für Einflüsse es auf Test-Aufwände und Qualität haben kann.

Advertisements

Tutorial: Strings im .config File speichern und anwenden

Tutorial: Strings im .config File speichern und anwenden

Wenn man weiss, das man im Zukunft ein gewissen Namen oder ähnliches, wie zum Beispiel die Credentials im Zukunft verändern möchte, ist es sehr sinnvoll, diese im .config File zu speichern statt “hard codiert” im Code zu lassen.
Die Begründung dafür ist ganz einfach, um eine Veränderung im .config braucht man nur eine Art von Notepad, für etwas hard codiert zu ändern, muss man alles wieder neu compilieren.

Schritt:

  • Strings im .config File speichern
  • Strings vom .config File im Code lesen
  • Strings vom .config File im Code überprüfen

Strings im .config File speichern

Das .config File heisst je nach Projekttyp ein bisschen anders.
In unserem Beispiel haben wir eine Consolenanwendung und dementsprechend heisst unseres .config File “App.config”.

appconfig
App.config

Jetzt können wir den “<appSettings>” hinzufügen und darin beliebigen Strings  hinzufügen mit den Tag “<add key=”[VariableNamen]” value=”[DeinString]” />”.

addedStringsToConfig
Hinzugefügte Strings

Wichtig: Wenn ein “<configSections>” Tag vorhanden ist, muss er direkt unter dem “<configSections>” stehen. Also darf man die “<appSettings>” Tag nicht oberhalb hinzufügen.

configSections
<configSections>

Strings vom .config File im Code lesen

Jetzt haben wir unsere Strings abgespeichert, aber wie können wir sie jetzt im Code ansprechen?

Das ist sehr einfach, man kann es, wie immer beim Programmieren, auf verschiedene Arten lösen, ich bevorzuge aber die folgende Lösung.
Sie ist ganz einfach zu implementieren und sie ist sehr verständlich.

Ich erstelle für jeden String einen “privat member variable” und befülle sie durch den ConfigurationManager direct.

readingStringsInCode
.config String im Code ansprechen und in member Variablen speichern

 

Für den ConfigurationManager braucht man die System.Configuration Referenz.

using Systemconfig
using System.Configuration

 

Die kann man ganz einfach hinzufügen:

 

Rechtsklick auf “References” -> “Add Reference” -> “Framework” und dann das Kästchen bei der “System.Configuration” auswählen.

addUsingSystemConfiguration
Add System.Configuration

Strings vom .config File im Code überprüfen

Wir können bereits die Strings vom App.config  benutzten, aber wenn jetzt etwas im App.config nicht stimmen würde und eine der benutzten Variablen nicht mehr vorhanden ist, kann das zu ein grosses Problem werden.

Deswegen sollte man im Konstruktor der Klasse sicherstellen, dass die Member Variablen weder Null noch Empty sind.

Ich mache meistens dafür eine kleine Methode, man könnte aber auch es direkt vom Konstruktor machen, ist aber in meiner Meinung nicht so schön.

CheckSettingsValuesInConstr
Methode Call von der Konstruktor

 

checkingMembersMethod
Kontrolle null or empty