2011-02-06 17 views
19

Esistono diversi metodi di test delle unità in Android, qual è il migliore per testare una visualizzazione personalizzata che ho scritto?Android: come testare una visualizzazione personalizzata?

Attualmente sto testandolo come parte della mia attività in un caso di test della strumentazione, ma preferisco testare solo la vista, isolata.

+0

Che cosa si intende per 'testare la vista'? – pkananen

risposta

18

Il test dell'unità di misura è un metodo mediante il quale vengono testate singole unità del codice sorgente per determinare se sono idonee all'uso. Quindi quando dici di voler testare la tua vista personalizzata, puoi controllare vari metodi delle tue visualizzazioni personalizzate come "onTouchEvent", "onDown", "onFling", "onLongPress", "onScroll", "onShowPress", "onSingleTapUp", "onDraw" e vari altri a seconda della logica aziendale. È possibile fornire valori simulati e testarlo. Suggerirei due metodi per testare la tua vista personalizzata.

1) Monkey Testing Il test delle scimmie è un test casuale eseguito da strumenti di test automatici. Un test della scimmia è un test unitario eseguito senza alcun test specifico in mente. La scimmia in questo caso è il produttore di qualsiasi input. Ad esempio, un test della scimmia può inserire stringhe casuali in caselle di testo per garantire la gestione di tutti i possibili input dell'utente o fornire file garbage per verificare il caricamento di routine che hanno una fede cieca nei loro dati. Questa è una tecnica di test della scatola nera e può controllare la tua vista personalizzata in così tante condizioni uniche che rimarrai stupito :).

2) Unit Testing

2a) Utilizzare Robotium Unit Testing Framwork

Vai Robotium.org o http://code.google.com/p/robotium/ e scaricare il progetto di esempio di test. Robotium è un framework davvero facile da usare che rende facile e veloce il test delle applicazioni Android. L'ho creato per rendere possibile il test delle applicazioni Android avanzate con il minimo sforzo. È usato in congiunzione con ActivityInstrumentationTestCase2.

2b) utilizzare Android Testing Framework

Ecco i link al riferimento: http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2.html e http://developer.android.com/reference/android/test/ActivityUnitTestCase.html

Per cominciare: http://developer.android.com/guide/topics/testing/testing_android.html

Secondo un utente: Oltre a testare facilmente la piattaforma non logica dipendente non ho trovato un modo intelligente per eseguire i test, fino ad ora (a per me) la piattaforma effettiva test di logica è macchinosa. E ' quasi non banale in ogni caso perché ho differenze riscontrate nell'attuazione tra l'emulatore e il mio dispositivo reale e odio per eseguire un'unità di implementazione di prova sul mio dispositivo solo per rimuovere l'applicazione in seguito.

La mia strategia è stata: Cercate di essere conciso e fare il bene logica pensato e quindi verificare pezzo per pezzo implementazione (meno quindi auspicabile).

anche Stephen Ng fornisce buona aproach per la prova vera e propria unità per soluzione progetti Android: https://sites.google.com/site/androiddevtesting/

Un utente ha fatto uno screencast.

Ecco uno ScreenCast su come ho fatto eseguire Test delle unità. Unità semplice Test e test di unità più complessi che dipendono dall'avere un riferimento a oggetti Contesto o Attività . http://www.gubatron.com/blog/2010/05/02/how-to-do-unit-testing-on-android-with-eclipse/

Speranza che aiuta a testare la visualizzazione personalizzata in tutte le possibili condizioni :)


Commento (futlib) Tutti i vostri suggerimenti sembrano coinvolgere testare l'ATTIVITA ', mentre io voglio davvero prova solo la VISTA. Potrei voler usare questo punto di vista in altre attività, quindi non ha molto senso per me testarlo con uno specifico. - futlib

Risposta: Per implementare una visualizzazione personalizzata, di solito si inizierà fornendo override per alcune delle serie metodi che il quadro invita tutte le viste. Ad esempio "onDraw", "onKeyDown (int, KeyEvent)", "onKeyUp (int, KeyEvent)", "onTrackballEvent (MotionEvent)" ecc di la visualizzazione personalizzata. Quindi, quando vuoi fare il test dell'unità per la tua personalizzazione, devi provare questi metodi e prova il fornendo valori falsi in modo che tu possa verificare la tua vista personalizzata su tutti i possibili casi . Il test di questi metodi non significa che si sta testando l'ATTIVITÀ , ma significa testare la propria vista personalizzata (metodi/funzioni) che è all'interno di un'attività. Inoltre, devi mettere la tua vista personalizzata in un'attività alla fine per gli utenti di destinazione . Dopo il test completo , la tua vista personalizzata può essere inserita in molti progetti e molte attività.

+1

Tutti i tuoi suggerimenti sembrano implicare il test di ACTIVITY, mentre voglio davvero testare solo la VISTA. Potrei voler usare questo punto di vista in altre attività, quindi non ha molto senso per me testarlo con uno specifico. – futlib

+0

@futlib, ho modificato la mia risposta e l'ho spiegata in modo più dettagliato. Per favore controlla. –

+0

Questo chiarisce le cose, ma la mia domanda centrale è: che tipo di metodo di prova posso usare per questo? Test di strumentazione? Quelli hanno bisogno di un'attività. O semplici test JUnit? O AndroidTestCase o ApplicationTestCase? – futlib

20

Una soluzione semplice per la mancanza di un'implementazione TestCase mirata alla visualizzazione sarebbe quella di creare un'attività semplice all'interno del progetto di test che include la visualizzazione. Ciò ti consentirà di scrivere test contro la vista utilizzando una semplice attività. Informazioni sui test di attività:

http://developer.android.com/reference/android/test/ActivityUnitTestCase.html

+0

Ciò significa che dovrò creare un'attività "fittizia"? Bene, abbastanza giusto. – futlib

+0

+1 per la versione concisa della risposta. – cdhabecker

13

Ecco un suggerimento diverso che funziona bene in molti casi: Supponendo che si fa riferimento la visualizzazione personalizzata all'interno di un file di layout, è possibile utilizzare un AndroidTestCase, gonfiare la vista, e poi eseguire test contro di esso in isolamento. Ecco qualche esempio di codice:

my_custom_layout.xml:

<?xml version="1.0" encoding="utf-8"?> 
<de.mypackage.MyCustomView ... 

MyCustomView.java:

public class MyCustomView extends LinearLayout { 

    public MyCustomView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public void setTitle(CharSequence title) { 
     ((TextView) findViewById(R.id.mylayout_title_textView)).setText(title); 
    } 
... 

MyCustomViewTest.java:

public class MyCustomViewTest extends AndroidTestCase { 

    private MyCustomView customView; 

    @SuppressLint("InflateParams") 
    @Override 
    protected void setUp() throws Exception { 
     super.setUp(); 
     customView = (MyCustomView) LayoutInflater.from(getContext()) 
      .inflate(R.layout.my_custom_layout, null); 
    } 

    public void testSetTitle_SomeValue_TextViewHasValue() { 
     customView.setTitle("Some value"); 
     TextView titleTextView = (TextView) valueSelection.findViewById(R.id.mylayout_title_textView); 
     assertEquals("Some value", titleTextView.getText().toString()); 
    } 
... 
+0

cos'è 'valueSelection' in' TextView titleTextView = (TextView) valueSelection.findViewById (R.id.mylayout_title_textView); '? – beerBear

+0

Non sono sicuro, ad essere onesto (troppo tempo fa), ma penso che sia un refuso - dovrebbe probabilmente essere 'customView' (che contiene quel' TextView'). – csoltenborn

Problemi correlati