AndroidJUnit4.class устарел: как использовать androidx.test.ext.junit.runners.AndroidJUnit4?

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

@RunWith(AndroidJUnit4.class)

от

import androidx.test.runner.AndroidJUnit4;

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

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

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

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

Ответ 1

Согласно документации для AndroidJUnit4, файл Gradle должен содержать следующую строку:

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

После добавления этого у меня все заработало.

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

Ответ 2

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

В своем файле Gradle, где вы изменили зависимость, убедитесь, что вы добавляете ее как нужный вам тип, т.е.

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

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

Для юнит-тестов:

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

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

Ответ 3

Для меня сработали следующие шаги:
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<MainActivity> 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.

Ответ 4

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

Ответ 6

я получил ту же ошибку в файле ExampleInstrumentedTest.java после того, как я попытался добавить свой проект в github. эта опция у меня не сработала File → Invalidate Caches... и выберите Invalidate и Restart

тогда я делаю это....это работает для меня

добавьте эту строку в build.gradle

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

Ответ 7

Android Doc говорит -

Этот класс устарел.

Вместо этого используйте androidx.test.ext.junit.runners.AndroidJUnit4.

Поэтому замените следующую строку -

androidTestImplementation 'androidx.test:runner:1.1.0'

с -

androidTestImplementation "androidx.test.ext:junit:1.0.0"

Ответ 8

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

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