Мне нужен доступ и контекст Android для теста JUnit.
Я пытался использовать MockContext и расширять AndroidTestCase, но каждый раз, когда я получаю сообщение об ошибке (заглушка!)
Мне нужен доступ и контекст Android для теста JUnit.
Я пытался использовать MockContext и расширять AndroidTestCase, но каждый раз, когда я получаю сообщение об ошибке (заглушка!)
Как насчет использования AndroidTestCase вместо теста JUnit? AndroidTestCase предоставит контекст с помощью getContext(), который можно использовать там, где это необходимо.
Другой способ получить доступ к контексту из 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));
}
}
Если ваш тест является инструментальным тестом (выполняется на эмуляторе или устройстве), вы можете просто использовать
Context appContext = InstrumentationRegistry.getTargetContext();
Зависимость:
androidTestCompile 'com.android.support.test:runner:0.5'
Попробуйте это для случая, когда ваш тестовый класс расширяет ActivityInstrumentationTestCase2:
InputStream is = null;
try {
is = getInstrumentation().getContext().getAssets().open("your.file");
} catch (IOException e) {
Log.d("Error", "Error during file opening!!!");
}
Каждое действие является подклассом контекста, поэтому вы должны использовать свои действия, когда вам нужен контекст. Класс Context — это не то, что вы создаете из приложения.