Enhetstesting av Android-apper er enkelt med Robolectric

Enhetstesting gir betydelige fordeler som en utviklingspraksis og bidrar til å sikre kode av høyere kvalitet med færre feil. Dessverre kan enhetstesting av Android-apper være utfordrende.

Android SDK gir et API som gjør antagelser om miljøet den kjører i. Dette betyr at uten en enhet eller en emulator er testing vanskelig. Å bygge, distribuere og starte appen for hver test er treg og påvirker produktiviteten til utviklerne. Robolectric gir et rammeverk som tillater utførelse av enhetstest uten behov for en enhet eller en emulator.

Følgende eksempel viser en veldig grunnleggende bruk av Robolectric til å implementere enhetstester for en Android-app. Følg med trinnvis veiledning, eller last ned (5, 51 MB) og importer prosjektet i sin helhet.

1. Lag et nytt Android-prosjekt i Eclipse. Målrette Android 1.6 eller nyere. Gi nytt navn til oppstartsaktiviteten til Calculator.java og tilsvarende layout til Activity_calculator.xml. Disse filene vil inneholde kjernen i applikasjonslogikken.

2. For formålet med eksempelet vårt, vil vi bruke en veldig enkel layout. I filen / res / layout / Activity_calculator.xml lager vi en lineær layout. Den lineære utformingen inneholder først to EditTexts som lar brukeren legge inn to tall. Det neste elementet er en knapp som vil utføre tillegget når du klikker. Det siste elementet er en TextView som viser resultatet av tilleggsoperasjonen.

 xmlns: verktøy = "http://schemas.android.com/tools" 
 android: layout_width = "fill_parent" 
 android: layout_height = "fill_parent" 
 android: orientering = "vertikal" 
 android: layout_gravity = "left" 
 android: vekt = "left" 
 verktøy: context = "Kalkulator"> 
 android: id = "id @ + / firstNumber" 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: layout_marginTop = "16dp" 
 android: ems = "10" 
 android: input = "nummer"> 
 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 = "Legg til" /> 
 android: id = "id @ + / total" 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" /> 

3. I / src-katalogen til prosjektet oppretter vi en aktivitet som håndterer gjengivelse av oppsettet vårt og registrerer en OnClickListener med addButton. OnClickListener beregner totalen av de to tallene som brukeren legger inn og gjengir totalen rett under add-knappen.

 kalkulator for offentlig klasse utvider aktivitet { 
 private EditText firstNumber, secondNumber; 
 privat TextView totalt; 
 privat knapp addButton; 
 @Overstyring 
 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 = (Knapp) findViewById (R.id.addButton); 
 total = (TextView) findViewById (R.id.total); 
 addButton.setOnClickListener (ny View.OnClickListener () { 
 @Overstyring 
 public void onClick (Vis v) { 
 String firstNumberResult = firstNumber.getText (). ToString (); 
 String secondNumberResult = secondNumber.getText (). ToString (); 
 Integer totalResult = Integer.parseInt (firstNumberResult) + 
 Integer.parseInt (secondNumberResult); 
 total.setText ("Total =" + Heltall.toString (totalResult)); 
 } 
 }); } 
 } 

4. Nå som vi har en enkel implementering av kalkulatoren, kan vi legge til Robolectric-tester for å sikre at appen fungerer som forventet. Den beste måten å komme i gang er å følge Quick Start for Eclipse-dokumentasjonen. Disse trinnene vil guide deg gjennom konfigurering av Eclipse for å opprette og kjøre Robolectric-tester.

5. Når prosjektet er konfigurert for å lage og kjøre Robolectric-tester, kan den første enhetstesten legges til. Målet med den første testen er å sikre at når brukeren legger inn to tall og klikker på Legg til, vises et passende resultat i TextView.

 @RunWith (RobolectricTestRunner.class) 
 KalkulatorTest for offentlig klasse { 
 privat kalkulator kalkulator; 
 @Test 
 public void testClickAddButton_withPositiveValues ​​() { 
 kalkulator = ny kalkulator (); 
 kalkulator. Skap (ny pakke ()); 
 calculator.getFirstNumber () setText ( "1").; 
 calculator.getSecondNumber () setText ( "2").; 
 . Calculator.getAddButton () performClick (); 
 assertEquals ("3", kalkulator.getTotal (). getText (). toString ()); 
 } 
 } 

Denne testen krever tillegg av følgende getter-metoder i kalkulatorklassen:

 kalkulator for offentlig klasse utvider aktivitet { 
 // ... ... 
 public EditText getFirstNumber () { 
 returnere førstNummer; 
 } 
 public EditText getSecondNumber () { 

returner nummer nummer;

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

retur totalt;

}
 } 

Legg merke til at testen direkte påkaller disse komponentene som om den opererte i Android-enheten. Robolectric testing framework gir "skyggeobjekter" som overstyrer visse aspekter av Android SDK. Dette gjør at koden under test kan kjøres utenfor Android-miljøet.

6. Målet med neste test er å sikre at applikasjonen håndterer tomme innganger grasiøst. Merk at den naive implementeringen av kalkulatoren mislykkes i denne testen med en NumberFormatException. Når denne feilen er løst, eksisterer det nå en regresjonstest som vil sikre at fremtidige endringer i koden ikke introduserer det samme problemet.

 @RunWith (RobolectricTestRunner.class) 
 KalkulatorTest for offentlig klasse { 
 // ... ... 
 @Test 
 public void testClickAddButton_withEmptyValue () { 
 kalkulator = ny kalkulator (); 
 kalkulator. Skap (ny pakke ()); 
 calculator.getFirstNumber () setText ( "1").; 
 . Calculator.getSecondNumber () setText ( ""); 
 . Calculator.getAddButton () performClick (); 
 assertEquals ("", kalkulator.getTotal (). getText (). toString ()); 
 } 
 } 

Disse testene demonstrerer verdien av enhetstesting med Robolectric. Uten omkostningen med å distribuere applikasjonen til en enhet eller til og med en emulator, kan Robolectric-tester verifisere forventet applikasjonsatferd. Dette øker snuoperasjonen og hjelper utviklere med å løse kodingsproblemer før de tar seg inn i produksjonskoden.

Robolectric User Guide gir grunnleggende grunner for å komme i gang med dette kraftige testrammeverket. Selv om du finner at rammene ikke gir støtte for en test du vil skrive, er det enkelt å utvide rammene.

Så hvis enhetstesting er på oppgavelisten din, kan du prøve Robolectric. Enhetstesting av din neste Android-app har aldri vært så enkelt.

© Copyright 2020 | mobilegn.com