Saya membenturkan kepala saya ke dinding di sini mencoba mencari tahu mengapa IntelliJ / Android melaporkan "Paket pengujian kosong". Saya memiliki proyek kecil dengan dua Modul IntelliJ ("Proyek" di Eclipse). Modul pengujian Unit memiliki AndroidManifest.xml-nya sendiri, yang telah saya tempelkan di bagian bawah. Saya mencoba menjalankan ActivityUnitTestCase
, karena pengujian akan bergantung pada Context
-objek.
Nama paket dari modul utama adalah nilzor.myapp
. Nama pacakge dari modul tes adalahnilzor.myapp.tests
Mengapa runner pengujian tidak mendeteksi testBlah()
-method sebagai pengujian?
<?xml version="1.0" encoding="utf-8"?>
<!-- package name must be unique so suffix with "tests" so package loader doesn't ignore us -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="nilzor.myapp.tests"
android:versionCode="1"
android:versionName="1.0">
<!-- We add an application tag here just so that we can indicate that
this package needs to link against the android.test library,
which is needed when building test cases. -->
<application>
<uses-library android:name="android.test.runner"/>
</application>
<!--
This declares that this application uses the instrumentation test runner targeting
the package of nilzor.myapp. To run the tests use the command:
"adb shell am instrument -w nilzor.myapp.tests/android.test.InstrumentationTestRunner"
-->
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="nilzor.myapp"
android:label="Tests for nilzor.myapp"/>
</manifest>
Dan inilah kelas tes saya :;
package nilzor.myapp.tests;
public class NilzorSomeTest<T extends Activity> extends ActivityUnitTestCase<T>{
public NilzorSomeTest(Class<T> activityClass){
super(activityClass);
}
@SmallTest
public void testBlah(){
assertEquals(1,1);
}
}
Saya telah membaca dasar-dasar pengujian , dokumen pengujian aktivitas , dan mencoba mengikuti blog pengujian Hello world ini , meskipun itu untuk Eclipse. Saya tidak bisa meminta pelari pengujian untuk menemukan dan menjalankan pengujian saya. Apa yang saya lakukan salah?
Beberapa pertanyaan yang saya masih merasa tidak yakin adalah:
- Apakah saya memerlukan Anotasi di atas metode pengujian Unit?
- Apakah saya perlu mengawali metode dengan "test", atau apakah itu hanya untuk pengujian JUnit?
- Bisakah saya melakukan tes dalam sub-paket
nilzor.myapp.tests
?
Tetapi pertanyaan utama dari posting ini adalah mengapa runner pengujian tidak mendeteksi pengujian saya ?
sumber
cmd+shift+t
pintasan yang akan membuat kelas pengujian secara otomatis di lokasi paket yang benar yang cocok dengan kelas yang sedang Anda edit.@Test
spidol di atas tes.Jawaban:
Anda perlu menyediakan konstruktor default untuk kelas pengujian Anda, misalnya:
tentang pertanyaan Anda yang lain:
Tidak. Pengujian saya masih berjalan tanpa anotasi apa pun, tapi menurut saya praktik yang baik untuk memilikinya. Ini memungkinkan Anda untuk menentukan ukuran pengujian yang akan dijalankan. Lihat Apa tujuan dari anotasi @SmallTest, @MediumTest, dan @LargeTest di Android? untuk lebih detail.
Ya, Anda membutuhkan awalan "test". InteliJ memberikan peringatan "metode tidak pernah digunakan" saat tidak ada awalan "pengujian", dan mengabaikan metode tersebut selama pengujian dijalankan.
Iya. Saya telah mengatur tes saya ke dalam subpaket dan tampaknya bekerja dengan baik.
sumber
Jika ini terjadi "tiba-tiba" atau "berfungsi 5 menit yang lalu", solusi saya adalah masuk ke konfigurasi Run / Debug dan menghapus konfigurasi apa pun di bawah "Pengujian Android". Terkadang konfigurasi ini rusak jika saya melakukan refaktorisasi kelas yang diuji (misalnya dengan pindah ke paket baru).
sumber
Create 'Tests in XXX...
- lalu berfungsi lagiTidak satu pun di atas yang memperbaikinya untuk saya. Apa yang membantu adalah mengikuti instruksi :
sumber
Saya memiliki masalah serupa. Tidak yakin mengapa ini terjadi, tetapi saya dapat memperbaikinya dengan membuka: "File"> "Invalidate Caches / Restart" di Android Studio.
sumber
Saya tidak tahu apakah ini membantu untuk Android Studio, tetapi saya mengalami semacam konflik Intellij-Gradle. Memecahkannya dengan "mengklik kanan" pada file uji dan tekan "kompilasi file ... Test.java". Setelah itu saya dapat menjalankan tes tunggal lagi.
sumber
Saya mengalami masalah yang sama di Android Studio 2.3.1, ternyata itu hanya bug dengan AS. Menjalankan pengujian yang sama pada versi 2.2.1 bekerja dengan baik.
Jika Anda hanya menjalankan Android Studio di saluran Cannary, saya sarankan Anda juga menginstal versi stabil. http://tools.android.com/tips/using-multiple-android-studio-versions
sumber
Saya memiliki tes yang berjalan dengan baik sampai
gradle
dan studio android ditingkatkan.Selain menambahkan konstruktor default ke pengujian Anda, Anda mungkin perlu melakukan beberapa hal ini agar rangkaian pengujian Anda berfungsi
Di bawah
src/
buatandroidTest/java/<your-package-name>/test
. PerhatikanandroidTest
. Apa pun yang termasukinstrumentTest
tidak akan berfungsi.Tambahkan ini ke
build.gradle
Tambahkan ini ke
AndroidManifest.xml
sumber
Untuk Intellij 15 saya menyelesaikan masalah ini dengan:
a. Klik kanan pada direktori sumber Anda (biasanya src) klik 'Sumber'.
b. Klik kanan pada direktori pengujian Anda, klik 'Test'
c. Klik kanan pada direktori Anda, klik 'Dikecualikan'
a. Klik tombol radio 'Gunakan jalur keluaran kompilasi modul'
b. Pilih direktori jalur keluaran Anda untuk 'Jalur Keluaran'
c. Pilih direktori jalur pengujian Anda untuk 'Jalur keluaran pengujian'
sumber
Jelas, Anda memerlukan perangkat target untuk menjalankan pengujian Anda karena itu adalah pengujian berinstrumen. Untuk beberapa alasan, Android studio terkadang tidak meminta Anda untuk mengarahkan ke perangkat target ini dan hanya meminta pesan "Empty Test Suite". Ada beberapa cara untuk memperbaikinya, berikut ini beberapa:
jalankan aplikasi utama Anda dan pilih perangkat target atau
buka konfigurasi Run (Run / Run ... / Edit Configurations) dan ubah Deployement Target Options
sumber
Dalam kasus saya, tidak ada jawaban sebelumnya yang berhasil. Solusinya adalah dengan hanya memindahkan kelas pengujian ke paket lain .
Ini terjadi di bawah
androidTest/
sumber
Dalam kasus saya masalah itu disebabkan karena kesalahan dalam kode saya, sebenarnya itu ada di kelas aplikasi, jadi aktivitas target tidak dibuka dan uji cetakan keluaran
Saya telah mencoba menjalankan tes langsung dari terminal dengan
adb shell am instrument -w -r -e package your.package -e debug false android.support.test.runner.AndroidJUnitRunner
. Dengan ini, ini mencetak lebih banyak tentang pengecualian.sumber
Saya mengalami masalah ini karena saya memiliki ini di build.gradle saya:
Meskipun saya tidak menggunakan Android Test Orchestrator (pasti telah menyalin dari tutorial secara tidak sengaja).
Mengomentari itu menyelesaikannya bagi saya.
sumber
Tidak ada solusi lain yang berhasil untuk saya, tetapi saya bisa membuatnya berfungsi hanya dengan mencopot aplikasi atau rangkaian pengujian yang ada, lalu menjalankan pengujian.
sumber
Dalam kasus saya, proyek yang saya kerjakan memiliki beberapa modul. Tak satu pun dari solusi yang saya temukan untuk kesalahan ini membantu saya, dan kemudian entah bagaimana saya menyadari bahwa jika saya menambahkan dependensi pengujian di KEDUA file build.gradle, pengujian secara ajaib mulai bekerja. Tidak masalah jika pengujian Anda hanya tinggal di 1 modul, kedua file gradle harus menyertakan dependensi dan nilai testInstrumentationRunner.
Jadi, jika seperti saya, tidak ada jawaban lain yang membantu Anda, coba tambahkan baris ini ke file build.gradle dari setiap modul Anda:
lalu tambahkan juga:
sumber
Saya baru saja mengganti nama file dan masalah diperbaiki.
sumber
Saya memiliki masalah yang sama, dan alasannya adalah kelas tes saya tidak memiliki Tes di akhir nama kelas!
sumber
Masalah saya disebabkan oleh pengecualian yang dilemparkan ke
@BeforeClass
metode kasus uji saya. Entah mengapa tidak menyebabkan pengujian gagal - saya hanya menemukannya dengan memeriksa keluaran logcat.Saya memperbaiki pengecualian dan tiba-tiba pengujian saya berjalan!
sumber
Setelah menghadapi masalah hari ini - tidak dapat menjalankan pengujian android berinstrumen dengan Empty suite error - saya menemukan masalah git tentang masalah ini dan berkat Stephan Linzner, saya dapat menjalankan pengujian.
tl; dr Anda harus mengklik kanan paket pengujian dan bukan kelasnya untuk menjalankan pengujian.
Referensi: https://github.com/googlecodelabs/android-testing/issues/27#issuecomment-219074863
sumber
Artikel ini membantu saya: Paket pengujian kosong
Pada dasarnya saya harus membuat paket - instrumentTest / java - di bawah direktori src saya, dan melakukan semua tes di sana. Kemudian saya bisa menjalankan tes ini satu per satu.
sumber
Saya memiliki proyek Java mentah di mana ini terjadi. Cukup Java + JUnit4. Itu pasti berada dengan sesuatu di file .idea / atau .iml Anda. Saya membatalkan milik saya, mengimpor ulang, dan akhirnya tes berjalan lagi.
sumber
Kelas pengujian mungkin dikecualikan dari kompilasi. Perbaiki di pengaturan-compiler-exclude.
sumber
Berikut adalah langkah-langkah debugging yang saya lalui ketika Android Studio tiba-tiba memutuskan untuk berhenti menjalankan / debugging tes (Dan anak laki-laki apakah ini sering terjadi dengan memalukan !!):
Saya akan menambahkan lebih banyak perbaikan saat saya mengalaminya!
sumber
Saya tidak melakukan apa-apa dan masalah hilang setelah setengah hari kesakitan, saya membuka dan menutup proyek berkali-kali, menjalankan setiap tes kelas secara manual, mungkin itu memperbaikinya.
sumber
Di studio Android dengan kerangka spock, saya telah mengubah versi gradle saya dari 2.2.2 menjadi 3.2.1 dan semuanya berjalan dengan baik.
sumber
Jawaban yang diterima tidak menyelesaikan masalah saya. Jadi saya memutuskan untuk menyalin
ExampleInstrumentedTest
yang dibuat secara default di Android Studio dan berjalan tanpa masalah, mengganti namanya selama proses penyalinan (tidak ada Refactor-> Ganti nama setelah menyalin!) Dan menempelkan konten pengujian unit saya ke dalamnya. Setelah itu kesalahan tersebut hilang.sumber
Saya mengalami error "Empty test suite" saat mencoba menjalankan pengujian unit lokal di proyek Android Studio 3.0 saya.
Setelah membaca dokumentasi Pengembang Android , saya segera menyadari bahwa masalah tersebut disebabkan oleh konfigurasi gradle saya yang menyertakan baris berikut.
Kelas AndroidJUnitRunner adalah runner pengujian JUnit yang memungkinkan Anda menjalankan kelas pengujian gaya JUnit 3- atau JUnit 4 di perangkat Android .
Karena pengujian saya bersifat lokal dan oleh karena itu tidak perlu dijalankan di perangkat apa pun, menghapus entri com.android.support.test ... di atas memungkinkan saya untuk menjalankan pengujian unit.
sumber
Saya melakukan beberapa penyisipan dalam db dalam metode @BeforeClass. Saya menyadari bahwa saya memiliki masalah pemetaan objek / database. Masalah pemetaan data ini adalah penyebab masalah ini bagi saya.
sumber
Dalam kasus saya, saya memiliki pengujian berinstrumen
androidTest/java/<package.name>/MyTestingClass
, tetapi saya telah menyetel varian build saya saat ini ke "praproduksi". Dan itulah intinya! Seperti yang ditentukan dalam dokumentasi Android Studio :Pesan itu
Class not found. Empty test suite.
terus muncul sampai saya melakukan ini:Tambahkan baris ini ke build.gradle saya :
Kemudian saya menjalankan tes lagi dan kali ini berjalan dengan sempurna !!!
sumber
Saya mengalami hal ini ketika saya salah menandai variabel kelas bukan tiruan dengan anotasi
@Mock
Menghapus anotasi dan tes berjalan dengan sukses. Ini terjadi dengan Junit 4.5 di Android Studiosumber
Bukan solusi tetapi solusi yang akan membuat Anda kembali ke jalur dengan cepat:
Pertama, temukan tes yang berhasil. Saya sedang menulis tes baru di mana saya mendapat kesalahan 'paket pengujian kosong'. Saya menjalankan tes lain dan mereka bekerja seperti biasa.
Salin file pengujian yang berfungsi. Jalankan untuk memastikan salinan ini berfungsi seperti aslinya.
Hapus tubuh dan ganti dengan kode tes baru Anda.
Tes sekarang harus bekerja.
Kami menghabiskan sekitar dua jam mencoba menemukan penyebabnya tetapi tidak berhasil.
sumber