Robolectric "Требуется разрешение ИНТЕРНЕТА"

Я получаю эту ошибку при создании операции с Robolectric:

java.lang.IllegalArgumentException: INTERNET permission is required.

Это то, что я делаю:

@Config(constants = BuildConfig.class,
    sdk = TestConfig.MIN_SDK_UNIT_TESTS,
    manifest = "src/main/AndroidManifest.xml")
@RunWith(RobolectricGradleTestRunner.class)
public class ATest {
  @Test public void testTrackDoNotAskMeAgainSelected() throws Exception {
    final AnActivity activity = Robolectric.buildActivity(AnActivity.class).create().get();
}

ОБНОВЛЕНИЕ 1: Наша текущая установка, у нас есть это манифесты:

app/src/androidTest/AndroidManifest.xml
app/src/debug/AndroidManifest.xml
app/src/main/AndroidManifest.xml
app/src/test/AndroidManifest.xml

я нашел это debug выполняется вместо testтак вот почему разрешение в app/src/test/AndroidManifest.xml игнорируется

2 ответа

Инициализируйте SDK [в моем случае Segment], для которого требуется разрешение INTERNET, как отдельную функцию, как показано ниже:

@VisibleForTesting()
public void initializeSegmentSdk() {
    // Create an analytics client with the given context and Segment write key.
    Analytics analytics = new Analytics.Builder(this, "xyz")
    // Enable this to record certain application events automatically!
    .trackApplicationLifecycleEvents()
    // Enable this to record screen views automatically!
    .recordScreenViews()
    .build();

    // Set the initialized instance as a globally accessible instance.
    Analytics.setSingletonInstance(analytics);
}

Создайте Shadow класса, который содержит вышеуказанный метод, и переопределите этот метод, чтобы он возвращал пустой.

ИЛИ ЖЕ

Вы также можете использовать Mockito, чтобы ничего не возвращать всякий раз, когда initializeSegmentSdk() метод называется

Пожалуйста, отметьте, чтобы использовать AndroidManifest в DebugTest (папку) для этого случая.

Добавьте это в свой манифест:

<uses-permission android:name="android.permission.INTERNET" />

Другие вопросы по тегам