Das Testen von Android-Apps ist mit Robolectric ganz einfach

Unit-Tests bieten als Entwicklungspraxis erhebliche Vorteile und tragen dazu bei, Code mit höherer Qualität und weniger Fehlern sicherzustellen. Leider kann das Testen von Android-Apps eine Herausforderung sein.

Das Android SDK bietet eine API, die Annahmen über die Umgebung trifft, in der es ausgeführt wird. Dies bedeutet, dass das Testen ohne ein Gerät oder einen Emulator schwierig ist. Das Erstellen, Bereitstellen und Starten der App für jeden Test ist langsam und wirkt sich auf die Entwicklerproduktivität aus. Robolectric bietet ein Framework, das die Ausführung von Komponententests ermöglicht, ohne dass ein Gerät oder ein Emulator erforderlich ist.

Das folgende Beispiel zeigt eine sehr grundlegende Verwendung von Robolectric zum Implementieren von Komponententests für eine Android-App. Befolgen Sie die Schritt-für-Schritt-Anleitung oder laden Sie sie herunter (5, 51 MB) und importieren Sie das gesamte Projekt.

1. Erstellen Sie ein neues Android-Projekt in Eclipse. Ziel Android 1.6 oder höher. Benennen Sie die Startaktivität in Calculator.java und das entsprechende Layout in activity_calculator.xml um. Diese Dateien enthalten den Kern der Anwendungslogik.

2. In unserem Beispiel verwenden wir ein sehr einfaches Layout. In der Datei / res / layout / activity_calculator.xml erstellen wir ein lineares Layout. Das lineare Layout enthält zunächst zwei EditTexts, mit denen der Benutzer zwei Zahlen eingeben kann. Das nächste Element ist eine Schaltfläche, die das Hinzufügen durch Klicken ausführt. Das letzte Element ist eine Textansicht, die das Ergebnis der Additionsoperation anzeigt.

 xmlns: tools = "http://schemas.android.com/tools" 
 android: layout_width = "fill_parent" 
 android: layout_height = "fill_parent" 
 android: orientierung = "vertikal" 
 android: layout_gravity = "left" 
 Android: Schwerkraft = "links" 
 tools: context = ". Rechner"> 
 android: id = "@ + id / firstNumber" 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: layout_marginTop = "16dp" 
 android: ems = "10" 
 android: inputType = "number"> 
 android: id = "@ + id / secondNumber" 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: ems = "10" 
 android: inputType = "number" /> 
 android: id = "@ + id / addButton" 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: text = "Hinzufügen" /> 
 android: id = "@ + id / total" 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" /> 

3. Im Verzeichnis / src des Projekts erstellen wir eine Aktivität, die das Rendern unseres Layouts und das Registrieren eines OnClickListener mit dem addButton übernimmt. Der OnClickListener berechnet die Summe der beiden vom Benutzer eingegebenen Zahlen und rendert die Summe direkt unter der Schaltfläche Hinzufügen.

 public class Calculator erweitert Aktivität { 
 private EditText firstNumber, secondNumber; 
 private TextView total; 
 private Button addButton; 
 @Override 
 public void onCreate (Bundle savedInstanceState) { 
 super.onCreate (savedInstanceState); 
 setContentView (R.layout.activity_calculator); 
 firstNumber = (EditText) findViewById (R.id.firstNumber); 
 secondNumber = (EditText) findViewById (R.id.secondNumber); 
 addButton = (Button) findViewById (R.id.addButton); 
 total = (TextView) findViewById (R.id.total); 
 addButton.setOnClickListener (neuer View.OnClickListener () { 
 @Override 
 public void onClick (View v) { 
 String firstNumberResult = firstNumber.getText (). ToString (); 
 String secondNumberResult = secondNumber.getText (). ToString (); 
 Integer totalResult = Integer.parseInt (firstNumberResult) + 
 Integer.parseInt (secondNumberResult); 
 total.setText ("Total =" + Integer.toString (totalResult)); 
 }} 
 }); }} 
 }} 

4. Nachdem wir nun unsere einfache Calculator-Implementierung haben, können wir Robolectric-Tests hinzufügen, um sicherzustellen, dass die App wie erwartet funktioniert. Der beste Weg, um loszulegen, ist die Dokumentation zu Quick Start for Eclipse. Diese Schritte führen Sie durch die Konfiguration von Eclipse zum Erstellen und Ausführen von Robolectric-Tests.

5. Nachdem das Projekt für das Erstellen und Ausführen von Robolectric-Tests konfiguriert wurde, kann der erste Komponententest hinzugefügt werden. Ziel des ersten Tests ist es sicherzustellen, dass, wenn der Benutzer zwei Zahlen eingibt und auf Hinzufügen klickt, ein entsprechendes Ergebnis in der Textansicht angezeigt wird.

 @RunWith (RobolectricTestRunner.class) 
 öffentliche Klasse CalculatorTest { 
 privater Rechner Rechner; 
 @Prüfung 
 public void testClickAddButton_withPositiveValues ​​() { 
 Rechner = neuer Rechner (); 
 calculator.onCreate (neues Bundle ()); 
 calculator.getFirstNumber (). setText ("1"); 
 calculator.getSecondNumber (). setText ("2"); 
 calculator.getAddButton (). performClick (); 
 assertEquals ("3", calculator.getTotal (). getText (). toString ()); 
 }} 
 }} 

Dieser Test erfordert das Hinzufügen der folgenden Getter-Methoden in der Calculator-Klasse:

 public class Calculator erweitert Aktivität { 
 // ... ... 
 public EditText getFirstNumber () { 
 return firstNumber; 
 }} 
 public EditText getSecondNumber () { 

return secondNumber;

}}
 public Button getAddButton () {return addButton; 
 }} 
 public TextView getTotal () { 

Rückgabesumme;

}}
 }} 

Beachten Sie, dass der Test diese Komponenten direkt aufruft, als ob sie auf dem Android-Gerät ausgeführt würden. Das Robolectric-Testframework bietet "Schattenobjekte", die bestimmte Aspekte des Android SDK überschreiben. Dadurch kann der zu testende Code außerhalb der Android-Umgebung ausgeführt werden.

6. Ziel des nächsten Tests ist es sicherzustellen, dass die Anwendung leere Eingaben ordnungsgemäß verarbeitet. Beachten Sie, dass die naive Implementierung des Rechners diesen Test mit einer NumberFormatException nicht besteht. Sobald dieser Fehler behoben ist, gibt es jetzt einen Regressionstest, der sicherstellt, dass zukünftige Änderungen am Code nicht dasselbe Problem verursachen.

 @RunWith (RobolectricTestRunner.class) 
 öffentliche Klasse CalculatorTest { 
 // ... ... 
 @Prüfung 
 public void testClickAddButton_withEmptyValue () { 
 Rechner = neuer Rechner (); 
 calculator.onCreate (neues Bundle ()); 
 calculator.getFirstNumber (). setText ("1"); 
 calculator.getSecondNumber (). setText (""); 
 calculator.getAddButton (). performClick (); 
 assertEquals ("", calculator.getTotal (). getText (). toString ()); 
 }} 
 }} 

Diese Tests zeigen den Wert von Unit-Tests mit Robolectric. Ohne den Aufwand für die Bereitstellung der Anwendung auf einem Gerät oder sogar einem Emulator können Robolectric-Tests das erwartete Anwendungsverhalten überprüfen. Dies erhöht die Entwicklungswende und hilft Entwicklern, Codierungsprobleme zu lösen, bevor sie in den Produktionscode einsteigen.

Das Robolectric-Benutzerhandbuch enthält die Grundlagen für den Einstieg in dieses leistungsstarke Testframework. Selbst wenn Sie feststellen, dass das Framework nicht die Unterstützung für einen Test bietet, den Sie schreiben möchten, ist es einfach, das Framework zu erweitern.

Wenn Unit-Tests auf Ihrer To-Do-Liste stehen, probieren Sie Robolectric aus. Das Testen Ihrer nächsten Android-App war noch nie so einfach.

© Copyright 2021 | mobilegn.com