Для моих инструментальных тестов я использовал

@RunWith(AndroidJUnit4.class)

от

import androidx.test.runner.AndroidJUnit4;

, чтобы установить мои тестовые случаи. Теперь эта строка помечается как устаревшая с подсказкой использовать AndroidJUnit4 из

import androidx.test.ext.junit.runners.AndroidJUnit4

Однако, если я попытаюсь импортировать AndroidJUnit4 из указанного пакета, я получаю сообщение об ошибке, что ext не может быть разрешено.

У вас есть идея, какой пакет нужно включить в gradle для решения этой проблемы?

Ответы (8)

Согласно документации для AndroidJUnit4,

  1. Файл gradle должен содержать следующую строку:

androidTestImplementation 'androidx.test.ext: junit: 1.1.1'

  1. Измените тестовый класс на AndroidJUnit4ClassRunner с AndroidJUnit4

Если это все еще не работает, убедитесь, что вы очистили и / или пересобирали свой проект. Также вы можете проверить текущую версию прямо в репозитории Google maven

Если вы импортировали эти тестовые библиотеки AnroidX, синхронизировали и перестроили проект, но импортированные пакеты все еще не были разрешены. Просто помните, как вы обновили свой проект до AndroidX, закройте Android Studio, удалите папку .idea и снова откройте свой проект...

У меня сработало!

Решение

  1. Добавьте эту строку в build.gradle: androidTestImplementation 'androidx.test.ext: junit: 1.1.1'

  2. Измените AndroidJUnit4 на AndroidJUnit4ClassRunner в тестовом классе

Предупреждение

Я получил ту же ошибку, но следующее решение не помогло мне:

File -> Invalidate Caches ... и выберите Invalidate and Restart

В моем случае помогла замена androidTestImplementation на testImplementation. Я не знал разницы, прежде чем читать эту разницу Android между testImplementation и androidTestImplementation в build.gradle

Для меня сработали следующие шаги:
1. Заменить библиотеки androidx на выложенные здесь. мой последний app / build.gradle выглядел так:

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    }
    ...
}

dependencies {
    ...
    testImplementation 'junit:junit:4.12'

    // Core library
    androidTestImplementation 'androidx.test:core:1.2.0'

    // AndroidJUnitRunner and JUnit Rules
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test:rules:1.2.0'

    // Assertions
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.ext:truth:1.2.0'
    androidTestImplementation 'com.google.truth:truth:0.42'

    // Espresso dependencies
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

}

Затем я вручную заменил импортированные модули в моем классе ExampleInstrumentTest.java последними классами:

import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4ClassRunner.class)
public class ExampleInstrumentedTest {
    ...
    @Rule
    public final ActivityTestRule main = new ActivityTestRule<>(MainActivity.class, true);

    @Before
    public void init() {
        ...
    }
    @Test
    public void listCount() {
        ...
    }

    @Test
    public void useAppContext() {
        Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();

        Assert.assertEquals("in.curioustools.aad_x_testing2", appContext.getPackageName());
        System.out.println("useAppContext : Test Ran");
    }
}

Меня беспокоил тот факт, что класс InstrumentationRegistery все еще не рекомендуется использовать. Итак, я использовал InstrumentationRegistry.getInstrumentation (). GetTargetContext (); из androidx.test.platform.app.InstrumentationRegistry class.

Если вы пробовали решение @ MarcelGangwisch, и ваша сборка не работает, говоря, что она не может найти ресурс, И вы также очистили / перестроили свой проект, но он по-прежнему не работает, попробуйте следующее: (на основе решения @ KrzysztofDziuba)

В вашем файле gradle, в котором вы изменили зависимость, убедитесь, что вы добавляете его как нужный вам тип, например: * 100002*

Для тестов пользовательского интерфейса:

androidTestImplementation 'androidx.test.ext: junit: 1.1.0'

Для модульных тестов:

testImplementation 'androidx.test.ext: junit: 1.1.0'

В моем случае я добавил как оба, и теперь он работает.

Я пробовал все вышеперечисленное, пока не зашел на официальный сайт Android, и они предложили импортировать из androidx.test.ext.junit.runners.AndroidJUnit4 вместо androidx.test.runner. AndroidJUnit4.ссылка

  1. Включите эти строки в модуль приложения build.gradle.

    testImplementation 'androidx.test.ext: junit: 1.1.1' androidTestImplementation 'androidx.test.ext: junit: 1.1.1'

  2. В тестовом классе замените свой тестовый исполнитель на

    импорт androidx.test.ext.junit.runners.AndroidJUnit4;

  3. Если InstrumentationRegistry.getTargetContext () устарело, используйте InstrumentationRegistry из androidx.test.platform.app вот так

    InstrumentationRegistry.getInstrumentation (). GetTargetContext ()

2022 WebDevInsider