2010-08-17 1 views
5

In base a this SDK guide, è possibile realizzare un test di unità di un progetto di libreria creando un progetto di applicazione standard, facendo riferimento al progetto Libreria e quindi strumento dell'applicazione per il test dell'unità.Il progetto di libreria di test autonomo non riesce a trovare le classi di libreria

Tuttavia, quando faccio questo e avviare l'applicazione di test ottengo il messaggio

No tests found with test runner 'JUnit 3'.

Sto usando Eclipse e il plugin ADT Android, tutte le ultime versioni.

Nota: i progetti compilare bene. Il progetto di test installa anche bene l'emulatore. Ma nella console posso vedere che cerca <library>.apk, che ovviamente non esiste poiché lo sto compilando come libreria nel progetto di test.

Chiunque ha funzionato? E se sì, qual è l'inganno qui?

Aggiornamento: dopo aver rilevato e risolto un problema, che includeva effettivamente le classi di test (!), Il test runner ora può trovare tutti i test. Ma, tutti i test non riescono con le seguenti eccezioni:

java.lang.NoClassDefFoundError: <nameOfClassInLibraryProject>

nameOfClassInLibraryProject sono classi definite nel progetto di libreria. Queste classi dovrebbero essere compilate nel progetto di test e, in effetti, tutto si compila bene. Ma quando si esegue il progetto di test, il runtime non sembra trovare le classi della libreria.

risposta

5

Dopo molto giocherellare e perdite di tempo in Eclipse Sono riuscito a ottenere progetti Biblioteca Android al lavoro.

Secondo l'articolo Working with Library Projects:

Instead, you must compile the library indirectly, by referencing the library from a dependent application's build path, then building that application.

Il problema è che ho interpretato questo per significare che il progetto biblioteca dovrebbe aggiungere ai Progetti scheda in Java Build Path. In questo modo il progetto di test viene compilato poiché il codice della libreria è ovviamente disponibile per il compilatore. Ma poiché la libreria non è compilata in .jar o .apk in sé, le classi della libreria non vengono mai distribuite sul dispositivo.

La soluzione è quella di non aggiungere il progetto biblioteca per Progetti, piuttosto nella scheda Fonte, aggiungere la cartella Libreria/src utilizzando il ... tasto link Source. E sì, è la cartella della libreria src, non la radice del progetto della libreria, che deve essere collegata al progetto di test.

+1

Ho avuto lo stesso problema (NoClassDefFoundError), anche se non con un progetto di test lib autonomo ma in un progetto di test per un progetto di applicazione che fa riferimento a un progetto di libreria Android. La tua soluzione ha funzionato nondimeno, grazie mille per averlo capito. – jpo

+1

Grazie per questo. Solo quando ho rimosso il riferimento del progetto dalle proprietà del mio progetto e aggiunto la libreria come progetto di libreria, ha funzionato. –

+1

È più facile aggiungere la libreria nelle proprietà del progetto, nella sezione Android come una libreria, come spiegato qui: http: // stackoverflow.it/questions/8248196/how-to-add-a-library-progetto-a-un-android-project – theV0ID