Как скопировать файлы из ресурсов по методу setUp из Android Junit ServiceTestCase?
Я пишу тестовый код JUnit для реализации сервиса Android, и мне нужно инициализировать тесты с некоторыми файлами, скопированными на SDCard. Моя подпись класса выглядит так:
public class ImageServiceTest extends ServiceTestCase<ImageService>
Я пытаюсь использовать этот совет для копирования файлов из ресурсов, но метод getAssets() должен расширять класс Activity.
public void copyAssets() {
AssetManager assetManager = getAssets();
...
}
Итак... Как я могу скопировать файлы из ресурсов на SDCard, чтобы настроить тест Junit в Android?
Заранее спасибо.
Ps:
'getSystemContext (). getAssets();', 'getContext (). getAssets();', 'getApplicationContext ();' возвращает контекст проекта службы, а не контекст тестового проекта.
Сейчас я пытаюсь использовать Инструментарий, однако это требует Деятельности, и я работаю с сервисным проектом. Я смотрю, как использовать Инструментарий без деятельности...
3 ответа
Ок, это было довольно легко.
Моя главная проблема заключалась в том, чтобы получить контекст из тестового проекта для доступа к папке их ресурсов. Но getContext() возвращает основной контекст проекта. Итак, чтобы получить контекст тестового проекта, я создаю новый контекст, передавая тестовый пакет:
Context mTestAppContext = getContext().createPackageContext("com.project.test",
Context.CONTEXT_IGNORE_SECURITY);
:-)
Вы можете сделать это:
protected void setUp() throws Exception {
super.setUp();
AssetManager assets = getSystemContext().getAssets();
InputStream input = assets.open("file.txt");
assertNotNull(input);
}
но учтите, что в этом случае активы должны быть в основном проекте Сервиса.
В AndroidTestCase также есть скрытый метод, предоставляющий все необходимое. Это может быть подвергнуто самоанализу.
private Context getTestContext() throws Exception
{
return (Context)getClass().getMethod("getTestContext").invoke(this);
}