2015-05-19 18 views
21

Devo creare un'app con l'utilizzo sqlite. Ora voglio scrivere i miei test unitari. Questi test unitari dovrebbero testare la mia classe SQLiteBridge. SQLiteBridge fornisce DAO per ogni classe figlio di modello.Test JUnit4 Android - Da dove ottenere il contesto?

ora ho il problema che ho bisogno di un contesto per creare il mio SQLiteBridge. SQLiteBridge crea e gestisce un database SQLite sul sistema ..

Dove ottenere il contesto oggetto da?

La mia configurazione è come qui (così sto usando Junit4 [grazie a Dio]): http://tools.android.com/tech-docs/unit-testing-support

EDIT: spero che ci sia un modo come il vecchio AndroidTestCase di estendere senza perdere Junit4. :)

risposta

50

Come descritto qui: https://code.google.com/p/android-test-kit/wiki/AndroidJUnitRunnerUserGuide Utilizzare InstrumentationRegistry per ottenere il contesto.

Tuttavia se si chiama InstrumentationRegistry.getContext() direttamente è possibile ottenere un'eccezione aprire il database. Credo che ciò sia dovuto al fatto che il contesto restituito da getContext() punta al contesto della strumentazione piuttosto che a quello dell'applicazione/test dell'unità. Invece utilizzare InstrumentationRegistry.getInstrumentation().getTargetContext()

Ad esempio:

@RunWith(AndroidJUnit4.class) 
public class SqliteTest { 

    Context mMockContext; 

    @Before 
    public void setUp() { 
     mMockContext = new RenamingDelegatingContext(InstrumentationRegistry.getTargetContext(), "test_"); 
    } 
} 

Il RenamingDelegatingContext prefissi semplicemente i nomi di file/database con test_ per evitare di sovrascrivere i dati che si possono avere nella stessa simulatore.

+0

Ho appena provato e ha funzionato! Penso che userò Robolectric .. ma grazie per questa soluzione! :) –

+0

Ho provato questo e funziona, ma il prefisso viene ignorato e quindi il database "reale" viene utilizzato nel test. Qualche idea sul perché questo potrebbe accadere? – moarCoffee

+3

InstrumentationRegistry non può essere risolto come un simbolo –

Problemi correlati