Le risorse nell'applicazione di test e nell'applicazione principale sono accessibili separatamente in un test case di strumentazione. Se si desidera accedere alle risorse che si trovano nella res/cartella di crudo o attivi del progetto di test in sé, è possibile utilizzare
getInstrumentation().getContext().getResources()
per accedere alle risorse nell'applicazione in fase di test (l'applicazione "target"), utilizzare
getInstrumentation().getTargetContext().getResources()
Nota, tuttavia, che non è possibile modificare i file nella cartella delle risorse;
getResources().getAssets().open(sourceFile)
restituisce un InputStream. Non c'è modo di modificare il file. Questo perché le risorse sono archiviate compresse all'interno dell'APK e non sono affatto modificabili.
Se ciò che si desidera è modificare il percorso dei file utilizzati dall'attività che si sta testando, è necessario utilizzare ActivityUnitTestCase e setActivityContext() con un RenamingDelegatingContext. Ciò consente di reindirizzare l'accesso a file e database in un contesto a una nuova directory specificando un prefisso di directory. È anche possibile utilizzare il more complex constructor per avvolgere il contesto di destinazione per la maggior parte delle operazioni, ma utilizzare contesto dell'applicazione di prova per le operazioni sui file, quindi l'attività sarà accedere ai file memorizzati nella applicazione di test piuttosto che l'applicazione principale, ma ancora usare altre risorse nell'applicazione primario .
fonte
2010-10-06 23:03:54
Grazie mille per l'ottima risposta. Vedo che ho ancora molto da imparare sui test di Android. Ti aggiornerò quando sarò in grado di implementare una di queste soluzioni. –
Quando ho provato ad eseguire l'InputStream in = getResources(). GetAssets(). Aperto ("test.txt") nella mia applicazione di test, e messo un file denominato "test.txt" nella mia directory attivi, ho ottenuto un'eccezione . –
@glenviewjeff In che contesto stavi chiamando getResources()? In un metodo di prova o all'interno di un'attività lanciata da un test? Sei sicuro che il 'Risorse' che stavi usando provenga da' getContext() 'e non da' getTargetContext() '? –