Подтвердить что ты не робот

Android JUnit4 Testing - откуда взять контекст?

Мне нужно создать приложение с использованием sqlite. Теперь я хочу написать свои модульные тесты. Эти модульные тесты должны тестировать мой класс SQLiteBridge. SQLiteBridge предоставляет DAO для каждого дочернего класса модели.

Теперь у меня возникла проблема в том, что мне нужен контекст для создания SQLiteBridge. SQLiteBridge создает и обрабатывает базу данных SQLite в системе.

Где получить объект Context-Object?

Моя настройка подобна здесь (так что я использую Junit4 [спасибо богу]): http://tools.android.com/tech-docs/unit-testing-support

EDIT: Я надеюсь, что существует способ, как старый AndroidTestCase продлить без потери Junit4.:)

4b9b3361

Ответ 1

Как описано здесь: https://code.google.com/p/android-test-kit/wiki/AndroidJUnitRunnerUserGuide Используйте инструмент InstrumentationRegistry для получения контекста.

Однако, если вы вызываете InstrumentationRegistry.getContext() напрямую, вы можете получить исключение, открывающее вашу базу данных. Я считаю, что это связано с тем, что контекст, возвращаемый getContext(), указывает на контекст инструментария, а не на приложение /unit test. Вместо этого используйте InstrumentationRegistry.getInstrumentation().getTargetContext()

Например:

@RunWith(AndroidJUnit4.class)
public class SqliteTest {

    Context mMockContext;

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

RenamingDelegatingContext просто префикс имени файла/базы данных с помощью test_, чтобы предотвратить перезаписи данных, которые могут иметься в одном и том же симуляторе.