2010-08-30 24 views
80

Sto scrivendo un progetto di libreria Android basato sulla classe Bitmap di Android (chiamiamolo AndroindLib) che contiene solo classi di utilità (nessuna attività). Ho provato a testarlo utilizzando Android JUnit, ma continua a lamentarsi che non riesce a trovare AnroidLib.apkCome testare un progetto di libreria Android

Qual è il modo giusto per testare le unità Android Library Project?

+1

Oppure (** avviso di plug-in spudorato **) è possibile utilizzare un progetto che ho creato: Cablaggio test di libreria Android (che mi piace chiamare "Alt H"). È disponibile come repository git: https://gitorious.org/alth Il progetto è ancora in fase di sviluppo e la documentazione è un po 'scarsa, quindi sentitevi liberi di contattarmi se avete domande. – i41

risposta

60

Citando the documentation:

"Ci sono due modi suggeriti di creazione di test sul codice e risorse in un progetto di libreria:

  • È possibile impostare un progetto di test che gli strumenti di un progetto di applicazione che dipende dal progetto della libreria È quindi possibile aggiungere test al progetto per funzionalità specifiche della libreria

  • È possibile impostare un progetto di applicazione standard che dipende dalla libreria e inserire gli ins trumentation in quel progetto. In questo modo si crea un progetto autonomo che contiene sia i test/strumentazioni e al codice da testare."

+19

quindi in pratica tutto ciò che devi fare è aggiungere la libreria al tuo progetto di test e testare il progetto di test. – njzk2

+0

Il link non è più valido, c'è qualche possibilità che tu possa indicarci quello attuale? –

+0

Assomiglia a: http://developer.android.com/guide/developing/projects/index.html#testing –

0

Se le tue classi ulitiy non dipendono da alcun codice specifico di Android, puoi semplicemente utilizzare i test di unità JUnit standard. Non è necessario utilizzare le versioni di Android.

+0

sono dipendente dalla classe Bitmap di Android ... – Lily

+1

Questo non funziona perché JUnit standard è compilato sulla JVM standard mentre i file java di Android sono compilati sulla VM di Dalvik. –

17

Nella tua progetto di prova cambia semplicemente il nome del pacchetto in modo che corrisponda al pacchetto della tua libreria Ad esempio, hai una libreria il cui pacchetto è "com.example.lib". Crea un progetto di prova che si rivolge alla tua libreria Nel file manifest vedrai package="com.example.lib.test" e targetPackage="com.example.lib" Basta cambiare il pacchetto da "com.example.lib.test" a "com.example.lib" (targetPackage lasciare così com'è).

Inoltre, assicurarsi che la libreria viene fatto riferimento al progetto di test NON in Java percorso di generazione, ma come al solito libreria Android: in Eclipse va indicato come biblioteca di Project->Properties->Android scheda, ma non in Project->Properties->Java Build Path scheda.

Quindi esegui i test.

+0

Le tue idee avevano senso per me, così il test si è mirato da solo (come l'app) e l'app è collegata alla libreria .... ma non riuscivo a farlo funzionare tramite ant build né IntelliJ .... come il .apk (previsto per l'app in prova) non esisteva quando ha provato ad installarlo, dato che è stato compilato in "test/bin /.- debug.apk" –

+0

Ho capito che funziona cambiando semplicemente il pacchetto il nome del progetto di test in manifest (e il pacchetto in prova, che dovrebbe essere lo stesso) NON coincide con il nome del pacchetto del progetto di libreria, oltre a rimuovere il riferimento al progetto di test di destinazione nel file ant.properties. –

+1

Penso che questa sia una risposta migliore di quella accettata, che fa eco alla documentazione - IMHO. –

0

NOTA: Questa soluzione è basata sull'utilizzo di Eclipse Indigo (3.8.2) e potrebbe essere attuato in modo leggermente diverso per un altro IDE, anche se i principi di base saranno le stesse.

ho avuto problemi simili e ho trovato che effettuare le seguenti operazioni sempre funziona:

(. NOTA: Queste istruzioni sono per la costruzione di un nuovo gruppo di progetto da zero Se si è già costruito parti del gruppo di progetto, allora si potrebbe essere necessario modificare i vostri progetti in modo che questi si collegano allo stesso modo.)

  1. creare un nuovo progetto Libreria di Android spuntando la casella di controllo "è la libreria" durante la creazione. (ad esempio, un progetto Android denominato "RemingtonAndroidTools").
  2. Costruisci il progetto Libreria Android e verifica che abbia creato un file jar nella cartella bin. (ad esempio un file jar denominato "RemingtonAndroidTools.jar".)
  3. Creare un progetto Android vuoto per testare l'app per Android che fungerà da App per test Android. (Ad esempio, un progetto Android denominato "RemingtonAndroidToolsTestApp"). Non è necessario modificare il codice sorgente o le risorse del progetto App Test Android a meno che non si disponga di qualcosa che deve essere aggiunto per il test. Molte cose possono essere testate senza alcuna modifica al Progetto App Test Android. Il progetto App Android Test è un ponte tra il tuo progetto Libreria Android e il progetto Android Junit che rende possibile il test del progetto Libreria Android tramite Android Junit.
  4. Vai alla scheda Libreria di Java Build Path per il progetto App Test Android ("RemingtonAndroidToolsTestApp" in questo esempio).
  5. Aggiungere il file jar ("RemingtonAndroidTools.jar" in questo esempio) del Progetto Libreria Android ("RemingtonAndroidTools" in questo esempio) tramite il pulsante "Aggiungi giare ...".
  6. Creare un nuovo progetto Test Android (ad esempio "RemingtonAndroidToolsTester") che funge da tester di libreria Android e selezionare il progetto App Test Android ("RemingtonAndroidToolsTestApp" in questo esempio) come destinazione.
  7. Andare alla scheda Libreria di Java Build Path per il progetto Android Library Tester ("RemingtonAndroidToolsTester" in questo esempio).
  8. Aggiungere il file jar ("RemingtonAndroidTools.jar" in questo esempio) del Progetto Libreria Android ("RemingtonAndroidTools" in questo esempio) tramite il pulsante "Aggiungi giare ...".
  9. Trova l'ultima cartella del tuo pacchetto Android nel progetto Android Library Tester ("danny.remington.remington_android_tools_test_app.test" per esempio) e aggiungi una classe di test ("MainActivityTest" ad esempio) che eredita da ActivityInstrumentationTestCase2.
  10. Modificare la classe di test ("TestActivityTest" in questo esempio) per utilizzare l'attività (ad esempio "TestActivity") dell'App Test per Android ("RemingtonAndroidToolsTestApp" in questo esempio) come parametro per ActivityInstrumentationTestCase2.
  11. Modificare la classe di test ("TestActivityTest" in questo esempio) e creare un costruttore predefinito che effettui una chiamata a super (Class) e passando nella classe dell'app Android Test ("TestActivity.class" ad esempio).

Si dovrebbe finire con tre progetti (biblioteca Android, Android Test App, Android Biblioteca Tester) che sembrano simili a questo:

enter image description here

enter image description here

enter image description here

Dovresti finire con una classe per testare la tua libreria Android simile a questa:

package danny.remington.remington_android_tools_test_app.test; 

import android.test.ActivityInstrumentationTestCase2; 
import danny.remington.remington_android_tools_test_app.TestActivity; 

/** 
* 
*/ 
public class TestActivityTest extends 
     ActivityInstrumentationTestCase2<TestActivity> { 

    public TestActivityTest() { 
     super(TestActivity.class); 
    } 

} 

È quindi possibile aggiungere qualsiasi test desiderato. Non sarà necessario fare riferimento all'App Test per Android ("RemingtonAndroidToolsTestApp" in questo esempio) per eseguire i test a meno che non richiedano l'accesso a un componente specifico di Android (ad esempio, la cartella Risorse). Se è necessario accedere a qualsiasi componente specifico di Android, è possibile farlo modificando l'App Test Android ("RemingtonAndroidToolsTestApp" in questo esempio) e quindi riferendola tramite la strumentazione fornita dall'API Android Junit standard.(Potete leggere di più su questo qui: http://developer.android.com/tools/testing/testing_android.html)

1

Per il documentation:

Test di un modulo di libreria è lo stesso di testare un'applicazione. La differenza principale è che la libreria e le sue dipendenze sono automaticamente incluse come dipendenze dell'APK di test. Ciò significa che l'APK di test include non solo il proprio codice, ma anche l'AAR della libreria e tutte le sue dipendenze. Poiché non esiste una "app in prova" separata, l'attività androidTest installa (e disinstalla) solo l'APK di test. Quando si uniscono più file manifest, Gradle segue l'ordine di priorità predefinito e unisce il manifest della libreria nel manifest principale dell'APK di test.

+0

quale compito eseguire i test? gradle test, o gradle androidTest? AndroidTest non è un compito. – Sunnyday

Problemi correlati