Как скопировать файлы из ресурсов по методу 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);
}
Другие вопросы по тегам