Как получить контекст Android для теста Junit из проекта Java?

Мне нужен доступ и контекст Android для теста JUnit.

Я пытался использовать MockContext и расширять AndroidTestCase, но каждый раз, когда я получаю сообщение об ошибке (заглушка!)


person jax    schedule 03.07.2010    source источник


Ответы (5)


Как насчет использования AndroidTestCase вместо теста JUnit? AndroidTestCase предоставит контекст с помощью getContext(), который можно использовать там, где это необходимо.

person Fred Medlin    schedule 09.09.2010
comment
AndroidTestCase больше не рекомендуется. - person AndroidDev; 24.10.2016
comment
Как это использовать ? - person B.shruti; 11.07.2019

Другой способ получить доступ к контексту из JUnit без расширения AndroidTestCase — использовать Rule для запуска тестируемого действия. Правила — это перехватчики, которые выполняются для каждого метода тестирования и будут выполняться перед любым кодом установки в методе @Before. Правила были представлены как замена ActivityInstrumentationTestCase2.

@RunWith(AndroidJUnit4.class)
@SmallTest
public class ConnectivityTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class);

    @Test
    public void testIsConnected() throws Exception {
        Context context = mActivityRule.getActivity().getBaseContext();
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        boolean connected = cm.getActiveNetworkInfo().isConnectedOrConnecting();
        Assert.assertEquals(connected, ConnectionUtils.isConnected(context));
    }
}
person Kuba Spatny    schedule 11.05.2015
comment
Класс ActivityTestRule не существует - person kurdtpage; 23.05.2018
comment
@kurdtpage уверен, что developer.android.com/reference/android/support /test/rule/ просто убедитесь, что у вас есть зависимость от тестовой библиотеки поддержки - person Kuba Spatny; 23.05.2018
comment
Вот зависимость, которую я добавил для устранения отсутствующего ActivityTestRule: androidTestImplementation 'com.android.support.test:rules:0.5' - person Tom Rutchik; 06.07.2019

Если ваш тест является инструментальным тестом (выполняется на эмуляторе или устройстве), вы можете просто использовать

Context appContext = InstrumentationRegistry.getTargetContext();

Зависимость:

androidTestCompile 'com.android.support.test:runner:0.5'
person Guillaume Perrot    schedule 01.07.2016

Попробуйте это для случая, когда ваш тестовый класс расширяет ActivityInstrumentationTestCase2:

InputStream is = null;
try {
    is = getInstrumentation().getContext().getAssets().open("your.file");
} catch (IOException e) {
    Log.d("Error", "Error during file opening!!!");
}
person Alex Sarapin    schedule 11.09.2012
comment
Вопрос касается только получения контекста, а не открытия файла из папки с ресурсами. - person Swapnil; 25.05.2015

Каждое действие является подклассом контекста, поэтому вы должны использовать свои действия, когда вам нужен контекст. Класс Context — это не то, что вы создаете из приложения.

person ognian    schedule 03.07.2010
comment
Затем используйте метод getActivity(). developer.android.com/reference/android/test/ - person ognian; 03.07.2010