AndroidJUnit4.class sudah usang: Bagaimana cara menggunakan androidx.test.ext.junit.runners.AndroidJUnit4?

255

Untuk tes instrumentasi yang saya gunakan

@RunWith(AndroidJUnit4.class)

dari

import androidx.test.runner.AndroidJUnit4;

untuk menetapkan kasus pengujian saya. Sekarang jalur ini akan ditandai sebagai usang dengan petunjuk untuk menggunakan AndroidJUnit4dari

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

Namun jika saya mencoba mengimpor AndroidJUnit4dari paket bernama saya mendapatkan kesalahan, itu exttidak dapat diselesaikan.

Apakah Anda punya ide, paket apa yang harus dimasukkan dalam gradle untuk menyelesaikan masalah ini?

Marcel Gangwisch
sumber
4
Saya pikir sumber Anda sudah usang, mereka tidak menyebutkan androidx sama sekali.
Marcel Gangwisch
1
Pengujian unit pada Android adalah kekacauan total dan penghentian. Satu-satunya hal yang berhasil bagi saya adalah membuat proyek awal yang baru, menyalin file yang relevan dari proyek itu untuk ditambang, beralih ke mode debug, dan melakukan pembatalan cache penuh. Juga untuk AndroidJUnit4 menguji nama paket harus cocok dengan nama paket perpustakaan.
Rupert Rawnsley

Jawaban:

377

Menurut dokumentasi untuk AndroidJUnit4 ,

  1. File gradle harus berisi baris berikut: androidTestImplementation 'androidx.test.ext:junit:1.1.1'

  2. Ubah kelas tes menjadi AndroidJUnit4ClassRunnerdariAndroidJUnit4

Jika masih tidak berhasil, pastikan Anda membersihkan dan / atau membangun kembali proyek Anda. Anda juga dapat memeriksa versi saat ini secara langsung di repositori pakar Google

Marcel Gangwisch
sumber
20
Gradle saya memiliki ini dan masih tidak dapat menyelesaikan masalah.
zuko
@zuko Bersihkan dan / atau bangun kembali proyek Anda, itu harus ada di sana. Jika masih belum dan Anda menggunakan modul, periksa apakah hierarki dependensi Anda sudah diatur seperti yang Anda harapkan; Anda mungkin perlu menambahkan ini ke modul tingkat atas juga — karena perpustakaan pengujian tidak dikompilasi ke dalam modul bersama untuk digunakan oleh modul hulu.
Jon Adams
@ JonAdams pohon ketergantungan saya terus memegang referensi ke perpustakaan yang lebih tua untuk beberapa alasan meskipun saya pikir saya menghapusnya. jadi setelah mencoba berbagai hal, akhirnya saya hanya memindahkan proyek ke yang baru dan semuanya baik-baik saja sekarang.
zuko
7
Haruskah kita juga mengubah testInstrumentationRunner di file gradle dari androidx.test.runner.AndroidJUnitRunner ke androidx.test.ext.junit.runners.AndroidJUnit4 ? Hanya ingin tahu apakah ada ketidakcocokan.
A Droid
22
@A Droid Ganti paket AndroidJUnit4 lama di impor dengan yang baru. Cukup Ganti impor androidx.test.runner.AndroidJUnit4; dengan impor androidx.test.ext.junit.runners.AndroidJUnit4;
Xplosive
28

Jika Anda sudah mencoba solusi @ MarcelGangwisch dan bangunan Anda gagal mengatakan tidak dapat menemukan sumber daya DAN Anda juga membersihkan / membangun kembali proyek Anda dan itu masih tidak berhasil, coba ini: (berdasarkan juga pada solusi @ KrzysztofDziuba)

Di file gradle tempat Anda mengubah dependensi, pastikan Anda menambahkannya sebagai tipe yang Anda butuhkan, yaitu .:

Untuk tes UI:

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

Untuk tes Unit:

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

Dalam contoh saya, saya menambahkannya sebagai keduanya dan sekarang berfungsi.

JJ Du Plessis
sumber
13

Larutan

  1. Tambahkan baris ini ke build.gradle: androidTestImplementation 'androidx.test.ext:junit:1.1.1'

  2. Ubah AndroidJUnit4ke AndroidJUnit4ClassRunnerdalam kelas tes

Peringatan

Saya mendapat kesalahan yang sama, tetapi solusi berikut gagal untuk saya:

File -> Cache Tidak Valid ..., dan pilih Valid dan Restart

HeshanHH
sumber
12

Bagi saya langkah-langkah berikut berhasil:
1. Ganti pustaka androidx dengan yang diposkan di sini . akhir saya app/build.gradleterlihat seperti ini:

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'

}

Saya kemudian secara manual mengganti modul yang diimpor di ExampleInstrumentTest.javakelas saya dengan kelas terbaru:

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");
    }
}

Hal yang menggangguku adalah fakta bahwa InstrumentationRegisterykelas masih usang. Jadi saya gunakan InstrumentationRegistry.getInstrumentation().getTargetContext();dari androidx.test.platform.app.InstrumentationRegistrykelas.

ansh sachdeva
sumber
3
@RunWith(AndroidJUnit4ClassRunner.class)adalah bagian yang menyelesaikan masalah dalam kasus saya. Saya tidak begitu mengerti mengapa android studio terkadang menghasilkan kode yang sudah usang.
Rafsanjani
Gunakan ApllicationProvider.getApplicationContext<Context>()sebagai gantiInstrumentationRegistry.getInstrumentation().getTargetContext();
Mitch
7

Saya mencoba semua yang diberikan di atas sampai saya pergi ke situs Android resmi, dan mereka menyarankan mengimpor dari pada androidx.test.ext.junit.runners.AndroidJUnit4bukan androidx.test.runner.AndroidJUnit4. tautan

Prox
sumber
0

Jika Anda mengimpor pustaka tes AnroidX itu, menyinkronkan dan membangun kembali proyek, tetapi paket yang diimpor masih belum terselesaikan. Ingat saja bagaimana Anda meningkatkan proyek Anda ke AndroidX, tutup Android Studio dan hapus .ideafolder dan buka kembali proyek Anda lagi ...

Ini berhasil untuk saya!

Jeff T.
sumber
0
  1. Sertakan baris ini dalam modul aplikasi build.gradle.

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

  2. Di kelas tes, ganti pelari tes Anda menjadi

    impor androidx.test.ext.junit.runners.AndroidJUnit4;

  3. Jika InstrumentationRegistry.getTargetContext()sudah usang gunakan InstrumentationRegistrydari androidx.test.platform.appseperti ini

    InstrumentationRegistry.getInstrumentation (). GetTargetContext ()

Balsamiq
sumber