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