2011-01-10 5 views
12

Sto scrivendo alcuni test per testare il mio codice di database sqllite. Può qualcuno qui spiegare se ci sarebbe una differenza scrivendo quei test usando il contesto che ottengo da AndroidTestCase.getContext() o usando uno IsolatedContext.IsolatedContext contro AndroidTestCase.getContext()

+0

Si dovrebbe considerare di contrassegnare la risposta inline come corretta, invece del collegamento, per le regole di stackoverflow relative non solo alla fornitura di collegamenti (che potrebbero andare giù). –

risposta

8

Per coloro che non vogliono seguire il link al gruppo Google, ecco la risposta data c'è:

AndroidTestCase.getContext() restituisce un oggetto Context normale. È il contesto del test case, non il componente in prova.

IsolatedContext restituisce un contesto "fittizio". Ho messo "finto" tra virgolette perché non è un finto nel senso normale di quel termine (per i test). Invece, è un modello Contesto che devi configurare tu stesso. It "isola" dal sistema Android in esecuzione, in modo che il Contesto o il test non escano accidentalmente dall'attrezzatura di prova. Per esempio , un IsolatedContext non colpirà accidentalmente un database di produzione (a meno che non lo imposti per farlo!) Nota, tuttavia, alcuni dei metodi in un IsolatedContext possono generare eccezioni. IsolatedContext è documentato nella Guida per gli sviluppatori in Framework Argomenti> Test, sia in Testing Fundamentals che in Content Provider Test.

Here is the Android docs on IsolatedContext.

And here is the relevant section of the Testing Fundamentals document.

2

ho avuto il problema semplice: ho bisogno di testare la mia classe DAO senza toccare il database reale. Così ho trovato il IsolatedContext da documenti. Ma alla fine ho trovato l'altro contesto negli stessi documenti: RenamingDelegatingContext potrebbe essere più facile da usare. Ecco il mio test case:

public class AddictionDAOTest extends AndroidTestCase { 

    @Override 
    public void setUp() throws Exception { 
     super.setUp(); 
     setContext(new RenamingDelegatingContext(getContext(), "test_")); 
    } 

    public void testReadAllAddictions() throws Exception { 
     ImQuitDAO imQuitDAO = new ImQuitDAO(getContext()); 
     ...  
    } 
} 
+0

Grazie, questo esempio mi ha finalmente aiutato a capire come farlo. Devo aver cercato su Google e cercato nella documentazione di Android poche ore e non ho mai trovato un esempio semplice e utile come il tuo. –