Jelas saya perlu statment impor yang benar untuk menyelesaikan masalah ini. Menurut dokumen untukAndroidJUnit4
, ini seharusnya
import android.support.test.runner.AndroidJUnit4;
Ketika saya melakukan itu, Android Studio menyoroti runner
dalam warna merah dan mengeluh "Tidak dapat menyelesaikan simbol 'pelari'".
Latar Belakang
Saya sampai pada titik ini dengan mengikuti tutorial di situs Pengembang Android untuk mengatur tes menggunakan UI Automator . Masalah pertama yang saya temui adalah itu com.android.support:support-v4:22.2.0
dan com.android.support.test:runner:0.2
tergantung pada berbagai versi com.android.support:support-annotations
. Saya mengikuti saran dari laporan bug Android ini dan menambahkan yang berikut ke allprojects
dalam proyek saya build.gradle
:
configurations.all {
resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}
Ini memecahkan kesalahan langsung, tetapi saya curiga ini mengarah ke masalah saya saat ini. Adakah yang punya saran tentang cara memperbaikinya?
Lepaskan bagian dari `./gradlew: app: dependencies
androidTestCompile - Classpath for compiling the androidTest sources.
+--- com.jayway.android.robotium:robotium-solo:5.2.1
+--- com.squareup:fest-android:1.0.8
| \--- org.easytesting:fest-assert-core:2.0M10
| \--- org.easytesting:fest-util:1.2.5
+--- com.android.support.test:runner:0.2
| +--- junit:junit-dep:4.10
| | \--- org.hamcrest:hamcrest-core:1.1
| +--- com.android.support.test:exposed-instrumentation-api-publish:0.2
| \--- com.android.support:support-annotations:22.0.0 -> 22.2.0
+--- com.android.support.test:rules:0.2
| \--- com.android.support.test:runner:0.2 (*)
\--- com.android.support.test.uiautomator:uiautomator-v18:2.1.0
compile - Classpath for compiling the main sources.
+--- com.android.support:appcompat-v7:22.2.0
| \--- com.android.support:support-v4:22.2.0
| \--- com.android.support:support-annotations:22.2.0
+--- com.android.support:support-v4:22.2.0 (*)
+--- com.google.android.gms:play-services:6.1.71
| \--- com.android.support:support-v4:20.0.0 -> 22.2.0 (*)
+--- com.crashlytics.android:crashlytics:1.+ -> 1.1.13
\--- com.jakewharton:butterknife:5.1.2
com.android.support.test:runner
. Bisakah Anda mengonfirmasigradle dependencies
bahwa Anda masih melakukan ini setelahresolutionStrategy
perubahan?(*)
artinya setelah itucom.android.support.test:runner:0.2
.Jawaban:
Pastikan aplikasi Anda dalam varian versi debug. Pergi ke Bangun> Pilih Bangun Varian ... dan yang berikut ini akan muncul:
sumber
android { testBuildType "staging"}
debug
tidak berfungsi kecuali secara eksplisit diatur ke "debug"Saya membuat kesalahan dengan menempatkan kelas tes di src / test . Setelah memindahkannya ke src / androidTest / java / ketergantungan diselesaikan.
sumber
Baiklah, ini kesalahan Anda dan kesalahan saya!
Jika kita akan menulis sepotong kode untuk Pengujian Unit Lokal kita tidak boleh menggunakan
@RunWith(AndroidJUnit4.class)
karena kita tidak menggunakan AndroidJUnit4 tetapi kita perlu Junit4. jadi kita harus menulis@RunWith(JUnit4.class)
. Dan tentu saja file uji java Anda berada di bawahapp/src/test/java/your.package.name
direktori.Kalau tidak (!!) kita ingin menulis beberapa Android Test Unit Unit kita harus meletakkan file java uji kita di
app/src/androidTest/java/your.package.name
direktori dan menggunakan anotasi seperti@RunWith(AndroidJUnit4.class)
sumber
Memperbarui
Perpustakaan Tes Android sekarang menjadi bagian dari AndroidX. Pastikan untuk menggunakan dependensi Gradle yang benar yang ditemukan dalam dokumentasi resmi .
Jawaban Asli
Saya menemukan di sini bahwa ada versi yang lebih baru dari Perpustakaan Dukungan Pengujian daripada apa yang saya gunakan:
Catatan: Pastikan untuk menggunakan versi terbaru dari perpustakaan ini. Pertanyaan ini dari waktu ketika Pustaka Dukungan Uji Android masih baru dan nomor versi di sini sudah ketinggalan zaman.
sumber
Saya memecahkan masalah dengan membuat perubahan kecil dalam file build.gradle aplikasi. Di
dependencies { ... }
bagian ini, pastikan untuk memasukkan baris berikut:atau versi apa pun yang terbaru pada saat itu (
...Compile
sudah usang dan telah digantikan oleh...Implementation
). Perhatikan penggunaandebugImplementation
. Android Studio menyarankan agar disertakan secara otomatisandroidTestImplementation
, yang tidak berfungsi.Saya menemukan cara mengubahnya dari tes ke debug dengan melihat Struktur Proyek di bawah Dependensi modul aplikasi, di mana Anda dapat mengubah ruang lingkup setiap ketergantungan, lihat di bawah.
sumber
Perhatikan bahwa OP sekarang dalam 2019, 4 tahun jadi Jika Anda menggunakan Android X maka
AndroidJUnit4.class
sudah usang, Anda memiliki kesalahan di sana dan satu lagi dengan iniandroidx.test.ext.junit.runners.AndroidJUnit4
. Saya sarankan untuk membaca tautan ini untuk menyelesaikan masalah.AndroidJUnit4.class sudah tidak digunakan lagi: Cara menggunakan androidx.test.ext.junit.runners.AndroidJUnit4?
Migrasi tes Junit4 ke androidx: Apa yang menyebabkan 'runner delegasi tidak dapat dimuat'? Bagi saya Android Studio disarankan untuk diganti
yang sudah tidak digunakan lagi
dan ini
dengan ini
Setelah itu kesalahan hilang tetapi saya tidak tahu apakah tes di masa depan berjalan ok?!
sumber
Dalam kasus saya ini membantu varian rilis:
sumber
Penyebab umum dari masalah ini adalah ketika menambahkan ketergantungan di bawah ini:
Ini adalah ketergantungan yang benar jika Anda akan menggunakan tes yang diinstrumentasi (tes dalam
androidTest
paket java)Tetapi untuk mengimplementasikan tes unit lokal (tes dalam
test
paket java) saat menggunakan dependensi yang disebutkan di atas; maka Anda akan menghadapiCannot resolve symbol 'AndroidJUnit4'
Itu karena
androidTestImplementation
direktif digunakan untuk mengimpor perpustakaan dalam tes instrumen, tetapi tidak dalam tes JVM / unit lokal.Jika Anda ingin menggunakan
AndroidJUnit4
dalam uji JVM / unit lokal, maka gunakan dependensi di bawah ini sebagai gantinyaHal yang sama berlaku jika Anda menambahkan ketergantungan yang terakhir saat menggunakan
AndroidJUnit4
dalam tes instrumen, Anda juga akan mendapatkanCannot resolve symbol 'AndroidJUnit4'
; karena Anda menggunakan arahan yang salah.sumber
Jika ada yang masih mengalami masalah ini:
dan menggunakan API 27,
build.gradle
yang ada di modul aplikasi, tambahkan baris berikut:sumber
letakkan kode ini di Dependensi Anda
sumber
Jika Anda menggunakan proyek dengan beberapa tipe build, maka tipe build yang dipilih di jendela varian build harus disebutkan dengan tag testBuildType dalam file build.gradle modul.
Sebagai contoh: Jika Anda menggunakan build type debug maka Anda harus menambahkan
android{testBuildType "debug" }
, jika menggunakan stage maka tambahkanandroid{testBuildType "stage"}
pernyataan dalam tag android.sumber
Pindahkan kelas tes ke src / androidTest / java /. Maka ketergantungan akan menyelesaikan.
sumber
Cache / Restart klasik yang tidak valid telah membantu saya! :)
sumber
Tambahkan dependensi ini di file build.gradle Anda:
Perbarui versi akhir (
1.1.1
) dengan versi terbaru yang dirilis.sumber
Menambahkan
menyelesaikan masalah ini untuk saya.
sumber
compile
arahan dependensi nama yang digunakan dalam aplikasi utama sedangkanandroidTestComiple
dependensi nama digunakan untuk pengujian. Jadi jawaban yang benar adalah menggunakanandroidTestCompile
, bukancompile
.Seperti yang ditunjukkan oleh daftar jawaban, ini bisa disebabkan oleh beberapa hal. Satu lagi untuk daftar:
Saya menjalankan LINT yang terlalu bersemangat yang menghapus semua impor yang tidak digunakan. Ini akan menghasilkan kesalahan yang sama, dan mudah untuk melewatkan bahwa ini masalahnya.
Android-studio akan menyoroti referensi yang tidak ada dalam kode uji - dan popup ALT-ENTER akan muncul (ini adalah bit yang mudah dilewatkan).
Selanjutnya, saya harus menghapus tes dari LINT - atau setidaknya menonaktifkan peringatan ini.
Sunting: @ Code-Apprentice, baris yang hilang adalah:
Jadi kesalahan pertama dalam file adalah dengan
@RunWith(AndroidJUnit4.class)
di awal kelas pengujian saya.sumber
Versi Cerpen:
Saya menjawab posting pertanyaan ini pada 15 Februari 2020. Sayangnya, saya telah kehabisan setiap solusi yang mungkin disebutkan di sini dan di tempat lain.
https://github.com/codepath/android_guides/wiki/UI-Testing-with-Espresso
https://github.com/udacity/AdvancedAndroid_TeaTime/issues/14
Android Espresso: tidak dapat menyelesaikan simbol AndroidJUnit4.class
Tidak dapat menyelesaikan simbol AndroidJUnit4
Android Espresso: tidak dapat menyelesaikan simbol AndroidJUnit4.class
Ya, tidak satu pun di atas yang berfungsi. Saya menggunakan fungsi bawaan, "Migrasikan ke Andoridx", mungkin mengingatkan saya bahwa saya harus memutakhirkan versi SDK target dan versi gradle saya. Setelah saya memutakhirkan versi gradle saya dari 2.0.2 ke 3.5.3. Mereka hanya berfungsi, bahkan pernyataan impor yang lama berfungsi.
sumber
Kesalahan yang sama terjadi pada saya ketika saya mengikuti aplikasi Google IOSched dan mengatur proyek saya dengan tiga tipe build [debug, rilis, pementasan] di mana debug dan rilis berbagi direktori sumber yang sama
Dalam hal ini, tentukan
testBuildType
file build.gradle di tingkat modul Anda dan proyek sekarang seharusnya dapat menyelesaikan simbol 'AndroidJUnit4'.Referensi: https://github.com/google/iosched/blob/master/mobile/build.gradle
sumber