41

A partire da Android Studio 1.1rc c'è Unit testing support e Mi chiedo quale sia la differenza tra test di strumentazione Android e test di unità.
Differenza tra test di strumentazione Android e test di unità in Android Studio?

quanto mi risulta:
test unitari utili per testare il codice che non richiede Android API, e le prove strumentazione Android sono piuttosto integrazione test per testare Android API specifica elementi o componenti della GUI.

Tuttavia, se si utilizza un framework come Robolectric o Mockito nei tuoi unit test, è possibile verificare il codice di Android (senza la necessità di un dispositivo), se non mi sbaglio.


È corretto o c'è una differenza maggiore? Se sì, a cosa serve ciascuno?

risposta

16

Test di unità isolare il componente in prova e questo è il motivo per cui vengono spesso utilizzati insieme a Mocks framework come Mockito: perché isolare l'unità dalle loro dipendenze. Si prega di notare ciò che dici riguardo l'API di Android è parzialmente vero, perché ci sono anche Instrumented Unit tests, ovvero La strumentazione fa parte del pacchetto Junit e, e anche le classi che estendono TestCase come la classe AndroidTestCase fa parte del pacchetto Junit ma consente l'uso di A) Context, che puoi chiamare con getContext(), e B) Risorse che fanno parte dell'API Android! Inoltre, tieni presente che AndroidTestCase è una classe base e ci sono molte altre classi abbastanza utili che estendono questa classe. Testano in modo specifico Loader, ContentProvider e persino i Servizi e hanno accesso all'API Android. quindi queste classi forniscono framework di test JUnit e metodi specifici per Android. Ora con Junit4 c'è il ServiceTestRule che si estende direttamente da Object e ti consente di testare più facilmente un servizio, sebbene non sia possibile avviare un Intent direttamente in questa classe.

Strumentazione test sono anche nel pacchetto Junit, ma il controllo delle API di Android è abbastanza totale perché i test di strumentazione sono istanziati nel sistema prima di qualsiasi codice di applicazione viene eseguita, e per testare è necessario aprire il vero applicazione (emulatore o telefono collegato con USB).Accedono ai componenti Android (ad esempio facendo clic su un pulsante) e al ciclo di vita dell'applicazione, di solito sono più lenti dei test di Junit che estendono TestCase (quelli esaminati sopra) l'uso tipico è con ActivityInstrumentationTestCase2 che ha un approccio di test funzionale, più orientato all'utente.

MODIFICA: Riguardo a Roboelectric e Mockito, che sono insieme a Espresso tra i più popolari framework di test al momento (13 luglio 2016), Roboelectric consente di eseguire più test in pochi secondi anziché minuti, e questo è davvero utile in team che devono eseguire test continui e sono soggetti a continua integrazione.

Dal sito di Robolectric:

Un approccio alternativo alla Robolectric è quello di utilizzare framework finte quali Mockito o per deridere lo SDK di Android. Anche se questo è un approccio valido , spesso produce test che sono essenzialmente inversioni del implementazioni del codice dell'applicazione. Roboelectric consente uno stile di prova più vicino al test della scatola nera, rendendo i test più efficaci per il refactoring e consentendo ai test di concentrarsi sul comportamento dell'applicazione anziché sull'implementazione dello di Android. Puoi comunque utilizzare una struttura di simulazione lungo lo con Robolectric se lo desideri.

Mockito che può essere utilizzato anche con Junit, viene utilizzato con l'eccezione di quando è necessario gestire classi finali, classi anonime o tipi primitivi.

33

Mi sembra che i test di strumentazione siano test di integrazione con la possibilità di controllare il ciclo di vita e gli eventi (onStart, onCreate, ecc.) Dell'app.

Test delle unità, a quanto ho capito, sta testando un'unità (ad esempio Classe) per i suoi dati e il comportamento.

Ad esempio, supponiamo di avere un gioco: questo gioco funziona su un'attività (attività principale) e si dispone di un personaggio basato su una classe Robot, che ha 2 metodi (fuoco e mossa). Dovresti testare l'attività principale con un test di strumentazione per vedere se si salva correttamente quando esci dall'app, se ripristina correttamente quando lo ripristini, ecc. E testerai Robot con un test di unità, per verificarne gli attributi e il comportamento.

Declinazione di responsabilità: Non sono una persona java, ma ho preso interesse per la tua domanda e ho risposto in base a una ricerca minore online. Probabilmente dovrai approfondire questo argomento per trovare una risposta più dettagliata.

14

Unit Testing

Prove di unità che funzionano solo sul computer locale. Questi test sono compilati per eseguire in locale sulla JVM per ridurre al minimo il tempo di esecuzione. Usa questo approccio per eseguire test di unità che non hanno dipendenze dal framework Android o hanno dipendenze che gli oggetti fittizi possono soddisfare.

Fondamentalmente, si esegue un semplice codice java per testare ad esempio un provider di contenuti, connessioni al database, input e output di metodi. Questo non funziona su Android. Per eseguirlo NON è necessario un dispositivo.

STRUMENTI PROVA

test unitari che girano su un dispositivo Android o emulatore. Questi test hanno l'accesso alle informazioni di Strumentazione, come il Contesto dell'app sotto test. Utilizzare questo approccio per eseguire test unitari con dipendenze Android che gli oggetti fittizi non possono facilmente soddisfare.

Così si blocca come l'utente utilizzerà l'applicazione effettiva, quindi è necessario un dispositivo (fisico o emulatore) per eseguirlo. Ha accesso a vista, le attività, il contesto, ecc

Riferimento: http://developer.android.com/tools/testing/testing_android.html

0

https://developer.android.com/training/testing/fundamentals.html#testing-pyramid

piccoli test sono test di unità che è possibile eseguire in isolamento da sistemi di produzione.Normalmente prendono in giro tutti i componenti principali e dovrebbero essere eseguiti rapidamente sulla tua macchina.

I test medi sono test di integrazione che si svolgono tra test di piccole dimensioni e test di grandi dimensioni. Integrano diversi componenti e funzionano su emulatori o dispositivi reali.

Grandi test sono i test di integrazione e di interfaccia utente eseguiti eseguendo un flusso di lavoro dell'interfaccia utente. Garantiscono che le attività chiave dell'utente finale funzionino come previsto su emulatori o dispositivi reali.

0

Unit Testing:

Spesso Prove di unità sono indicati come “test locale” o “test di unità locali”. Il motivo principale per questo sembra essere che si desidera essere in grado di eseguire test senza un dispositivo o un emulatore collegato.

I test di unità non sono in grado di testare l'interfaccia utente per l'app senza creare oggetti di simulazione come un'attività.


test Strumentazione:

test Strumentazione eseguito su un dispositivo o un emulatore. In background, la tua app verrà installata e verrà installata anche un'app di test che controllerà la tua app, la avvierà e eseguirà i test dell'interfaccia in base alle esigenze.

Test di strumentazione possono essere utilizzati per testare anche nessuna logica dell'interfaccia utente. Sono particolarmente utili quando è necessario testare il codice che ha una dipendenza da un contesto.


Ref link for example

0

Unit Testing

Vizio solo sulla macchina locale.

caso strumentazione di prova

Vizio sul dispositivo Android o emulatore Se controllate il banco di prova che gira su emulatore o dispositivo Android

Problemi correlati