IntelliJ IDEA dengan Junit 4.7 “!!! JUnit versi 3.8 atau yang lebih baru diharapkan: "


206

Ketika saya mencoba menjalankan tes berikut di IntelliJ IDEA saya mendapatkan pesan:

"!!! JUnit versi 3.8 atau yang lebih baru diharapkan:"

Perlu dicatat bahwa ini adalah proyek Android yang saya kerjakan di IntelliJ IDEA 9.

public class GameScoreUtilTest {
    @Test
    public void testCalculateResults() throws Exception {
        final Game game = new Game();

        final Player player1 = new Player();
        {
            final PlayedHole playedHole = new PlayedHole();
            playedHole.setScore(1);
            game.getHoleScoreMap().put(player1, playedHole);
        }
        {
            final PlayedHole playedHole = new PlayedHole();
            playedHole.setScore(3);
            game.getHoleScoreMap().put(player1, playedHole);
        }
        final GameResults gameResults = GameScoreUtil.calculateResults(game);

        assertEquals(4, gameResults.getScore());
    }
}

Jejak tumpukan penuh terlihat seperti ini ...

!!! JUnit version 3.8 or later expected:

java.lang.RuntimeException: Stub!
    at junit.runner.BaseTestRunner.<init>(BaseTestRunner.java:5)
    at junit.textui.TestRunner.<init>(TestRunner.java:54)
    at junit.textui.TestRunner.<init>(TestRunner.java:48)
    at junit.textui.TestRunner.<init>(TestRunner.java:41)
    at com.intellij.rt.execution.junit.JUnitStarter.junitVersionChecks(JUnitStarter.java:152)
    at com.intellij.rt.execution.junit.JUnitStarter.canWorkWithJUnitVersion(JUnitStarter.java:136)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:49)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)

Process finished with exit code -3

Intellij 9, tambalan terbaru.
benstpierre


Jujur saya akhirnya punted menggunakan plugin Android di IntelliJ dan menggigit peluru dan menggunakan Android Studio terbaru. semuanya baik
Kirby

Memetikan orang lain datang ke sini tanpa "Tes" dalam nama kelas Tes mereka; Anda harus menambahkan "Uji" saudara. Memberi nama kelas Anda "GameEngine" akan menyebabkan kesalahan yang sama, Anda dapat menyelesaikannya dengan membuatnya "GameEngineTest". Bersulang!
recepinanc

Jawaban:


364

Masalah ini terjadi karena Android Platform ( android.jar) sudah mengandung kelas JUnit. Pelari uji IDEA memuat kelas-kelas ini dan melihat bahwa mereka berasal dari JUnit lama, saat Anda mencoba menggunakan tes beranotasi yang merupakan fitur JUnit baru, oleh karena itu Anda mendapatkan kesalahan dari pelari uji.

Solusinya sederhana, buka Project Structure| Modules| Dependencies, dan pindahkan ke junit-4.7.jaratas, sehingga muncul sebelumnya Android 1.6 Platform di classpath. Sekarang pelari tes akan senang karena memuat versi JUnit baru.


9
Hanya untuk membuat orang sadar ini masih menjadi masalah dengan versi Android yang lebih baru.
Chris.Jenkins

memecahkan masalah dalam pakar juga dengan menempatkan ketergantungan yang disediakan android setelah dependensi tes
avianey

18
Saya memiliki proyek Android bertahap yang menggunakan robolectric seperti yang dijelaskan di sini: peterfriese.de/android-testing-with-robolectric dan ketika saya memindahkan Platform Android dari 1 di classpath, saya mendapatkan pengecualian berikut:Class not found: "com.example.intellijgradletest.MainActivityTest"
Heath Borders

7
Di IDEA 14.0.3 untuk mengubah urutan dependen, Anda harus menggunakan panah. Seret dan Jatuhkan tidak berfungsi.
david.perez

4
Di studio android, file-file ketergantungan di-autogenerasi. Karenanya tidak mungkin untuk bergerak naik / turun. Apakah ada cara lain untuk menyelesaikan masalah ini?
iMDroid

35

masukkan deskripsi gambar di sini

modul saya adalah modul perpustakaan java, jadi mengubah JRE ke 1.8 java menyelesaikan masalah.

Atau, Anda juga dapat melakukannya secara global melalui Pengaturan Modul> Lokasi SDK> JDK, menentukan JDK 8 Oracle alih-alih salinan Android SDK.


Ini benar-benar berfungsi dan juga masuk akal mengingat konteks masalah.
AgentKnopf

Dalam kasus saya, saya perlu mengubah JRE untuk Junit di Defaults
Rafael

Cara lain: Edit jdk.table.xml Anda di ~/Library/Preferences/AndroidStudioX.X/options/jdk.table.xmlatau C:\Users\Name\.AndroidStudioX.X\config\options\jdk.table.xmldi Windows. Temukan node <name value="Android API 28 Platform" />dan atur <annotationsPath>ke <root url="jar://$USER_HOME$/Android-SDK/platforms/android-28/data/annotations.zip!/" type="simple" />. Juga memastikan <classPath>simpul berisi platforms/android-28/...di kedua URL jalur file. Sesuaikan "Android-SDK" ke nama folder Anda.
Mr-IDE

Ini bekerja untuk saya! Cukup ubah dari Default (Android API 28) ke 1.8 (Java) dan berfungsi!
aiueoH

8

Saya punya masalah dengan proyek multi-modul (libgdx). Satu modul adalah Java murni dan memiliki tes. Solusi saya adalah mengatur "gunakan JRE alternatif" menjadi "Java 1.8" dalam menjalankan konfigurasi tes unit saya. Ini memastikan tidak ada android.jar ada di classpath dan pelari junit 4.x digunakan.


Anda tidak benar-benar perlu menggunakan 1.8. Cukup memilih 1,7 yang tidak datang dengan sdk Android.
kingston

8

Saya mendapat kesalahan yang sama saat membuat keduanya Unit Testdan Android Instrument Testdi Android Studio 1.4+ dan itu mulai membingungkan. Untuk menghindari kesalahan ini pastikan kelas tes Anda berada Android Testsdi bawahRun/Debug Configurations

  1. Pastikan Anda mengikuti instruksi dengan benar https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html
  2. Pastikan Test Artifactdalam Build Variantsdiatur keAndroid Instrumentation Tests
  3. Klik menu Run>Edit Configuration
  4. Pastikan nama kelas / metode Anda dalam Android TestsbukannyaJUnit
  5. Jika sudah di JUnitcukup hapus konfigurasi dan klik kanan pada file yang ingin Anda uji dan Runlagi. Ini kemudian akan membuat bagian konfigurasi di bawah Android Testsdan berjalan pada perangkat / emulator.

4
INI BEKERJA UNTUK SAYA => Jika berada di JUnit cukup hapus konfigurasi dan klik kanan pada file yang ingin Anda uji dan Jalankan lagi. Ini kemudian akan membuat konfigurasi di bawah bagian Tes Android dan dijalankan pada perangkat / emulator.
Devendra Vaja

Bekerja untuk saya juga. Saya menjalankan tes yang sama setelah memindahkannya dari testfolder ke androidTestfolder. Android Studio tidak memperbarui konfigurasi jalankan setelah melakukan ini
Daniil

5

Untuk Android Studio - mulai dari Android Studio 1.1 Beta 4 , Google telah menambahkan dukungan untuk plugin Android Gradle 1.1.0-RC . Plugin baru mendukung Unit Testing melalui Android Studio menggunakan junit 4+.

Ini masih eksperimental dan ada beberapa langkah manual untuk mengatur ini.


Ini bekerja tetapi Android Studio masih memiliki masalah dengan konfigurasi pembuatan otomatis untuk pengujian sehingga setiap kali Anda harus memperbaiki konfigurasi yang sedang berjalan dengan memilih kembali paket pengujian. Kalau tidak, NullPointerException selama uji coba.
Alfishe

4

Untuk semua orang yang membaca posting ini dan masih memiliki masalah yang sama dengan AndroidStudio 1.0. Anda tidak dapat mengubah urutan ketergantungan di AndroidStudio jika IDE menulis ulang secara otomatis. Dan, bahkan jika Anda berhasil mengubah urutan dengan memodifikasi file .iml, Anda akan mendapatkan "kelas tidak ditemukan ...". Ini karena jalur keluaran Tes tidak dapat ditetapkan pada AndroidStudio.

Sebenarnya, ada solusi untuk membuat AndroidStudio, Junit dan Robolectric bekerja bersama. Lihatlah https://github.com/JCAndKSolutions/android-unit-test ini dan gunakan plugin ini juga: https://github.com/evant/android-studio-unit-test-plugin

Berfungsi sempurna untuk saya.


2

Saya mendapatkan kesalahan yang sama ketika saya membuat paket junit saya sendiri

masukkan deskripsi gambar di sini

Untuk memperbaikinya, saya telah menambahkan dua baris ini di file gradle aplikasi saya seperti yang dijelaskan di sini :

dependencies {
    ...
    // Required -- JUnit 4 framework
    testCompile 'junit:junit:4.12'
    // Optional -- Mockito framework
    testCompile 'org.mockito:mockito-core:1.10.19'
}

1

Ada dua hal yang bisa saya bayangkan terjadi

  • Jika IDE Anda mencoba memulai tes Android Junit yang langsung berjalan pada emulator, Anda tidak dapat menggunakan Junit4.
  • Jika Anda secara tidak sengaja menggunakan kelas junit yang disediakan dari jar android, mereka tidak dapat berjalan pada jvm normal karena hanya ada kelas kompilasi nyata untuk vm dalvik android.

1

Ini juga terjadi pada saya di Android Studio 1.1 - meskipun harus mendukung pengujian unit tanpa plugin.

Di komputer lain (proyek yang sama, versi AS yang sama) saya menemukan bahwa ketika menjalankan tes unit, IDE tidak menambahkan file android.jar ke classpath, sedangkan di komputer saya melakukannya.

Tebakan terbaik saya adalah karena konversi yang kami lakukan dari Maven ke Gradle dan pindah dari intellij ke AS, beberapa cache pengaturan tetap berada di suatu tempat di mesin saya yang menyebabkan android.jar ditambahkan ke classpath.

Apa yang saya lakukan adalah menghapus semua cache terkait Android dari mesin saya (di bawah folder c: \ users \ USRE_NAME): .android .AndroidStudio .gradle .m2

Setelah itu saya membuka kembali proyek dan tes berhasil.

Masih mencoba memahami apa yang salah, tetapi ini harus melakukan trik untuk saat ini.


1

Saya mengalami masalah ini di Android Studio 1.5, karena saya tidak tahu bahwa saya harus mengganti pengaturan "Artefak Uji" di "Bangun Varian" (sudut kiri bawah jendela utama) dari "Tes Instrumentasi Android" ke "Tes Unit" ". Ketika Anda melakukannya, Anda dapat melihat file ExampleUnitTest.java di jendela Project.


1

Saya memiliki masalah yang sama tetapi karena alasan lain. Saya menggunakan IntelliJ dengan proyek java gradle biasa (bukan android) tetapi JDK diatur ke Android SDK di Project Structure(adalah JDK default karena beberapa alasan). Ini benar-benar bodoh tetapi IntelliJ tidak cukup baik untuk menunjukkan kepada saya apa yang salah, jadi saya terjebak pada hal itu.


1

Inilah cara saya menyelesaikannya:

Edit Konfigurasi -> Default -> Android JUnit -> Tambahkan yang berikut ini ke Direktori Kerja:

$ MODULE_DIR $


1

Bagi saya masalah ini disebabkan oleh konfigurasi run yang ketinggalan zaman / rusak untuk tes. Saya hanya perlu menghapus konfigurasi, kemudian membuat yang baru dan masalahnya telah diperbaiki.

Hapus konfigurasi tes lama


0

Dalam proyek Android yang saya miliki minifyEnabled = true, setelah saya mengubahnya untuk falsesemuanya berfungsi.


0

Jika Anda menghapus

testOptions {
    unitTests.returnDefaultValues = true
}

dari Anda build.gradleitu akan berhasil


0

Pergi ke Struktur Proyek -> Pengaturan Platform, ubah SDK menjadi 1,8 untuk menyelesaikan masalah saya.


0

Saya juga menghadapi masalah yang sama, setelah berubah menjadi build.gradle bekerja dengan baik untuk saya.

ubah versi junit Anda di dalam build.gradle ke:

    testImplementation 'junit:junit:3.8'


0

Mematikan "Gunakan embedded JDK" di Struktur Proyek / Lokasi SDK adalah apa yang membantu dalam kasus saya, tetapi saya tidak tahu persis apa alasan itu gagal di tempat pertama.


0

Ganti folder android.jar Anda di libs dengan yang terbaru. Anda dapat mengunduhnya dari sini


0

Di AndroidStudio,, Open Project Structure -> SDK LocationAnda dapat melihat JDKlokasi, mengubah penggunaan "Gunakan tertanam JDK" untuk Anda miliki JDKuntuk diterapkan, lalu ubah kembali ke "Gunakan tertanam JDK" , itu mungkin bekerja


0

Dalam kasus saya, perubahan JREdalam Run Configurationsdosis memecahkan masalah, tetapi ketika saya klik tombol run di sebelah fungsi pengujian, JREpilihan akan reset ke default.

Akhirnya, mirip dengan jawaban @CrazyLiu, di Project Structure - SDK Location - JDK, pilih Embedded JDK. Karena tidak ada kotak centang di Android Studio 3.6.


0

Saya mendapatkan pesan yang sama

JUnit version 3.8 or later expected

oleh kesalahan pemula yang sederhana. Saya telah menggunakan nama paket dan nama kelas yang sama pada src / main dan src / test untuk sebuah kelas (kelas HomeController dalam kasus saya):

my-test-project
  +--pom.xml
  +--src
    +--main
      +--com
        +--example
          +--Application.java
          +--controller
            +--HomeController.java
    +--test
      +--com
        +--example
          +--ApplicationTest.java
          +--controller
            +--HomeController.java  <---- same package and class name: not good!

Dengan itu, kelas HomeController src / utama, serta kelas HomeController src / test, memiliki jalur lengkap yang sama:

com.example.controller.HomeController.class

Hasilnya: semua tes yang bergantung pada kelas HomeController telah gagal.

Baik mengubah nama paket dan / atau nama kelas telah menyelesaikan masalah. Di sini contohnya, ketika keduanya, nama paket dan nama kelas diubah:

my-test-project
  +--pom.xml
  +--src
    +--main
      +--com
        +--example
          +--Application.java
          +--controller
            +--HomeController.java
    +--test
      +--com
        +--example
          +--test                       <---- added (optional)
            +--ApplicationTest.java
            +--controller
              +--HomeControllerTest.java    <---- changed

Sekarang nama kelas yang sepenuhnya memenuhi syarat berbeda. Nama kelas src / HomeController utama adalah:

com.example.controller.HomeController.class

dan nama kelas src / test HomeHontrollerTest adalah:

com.example.test.controller.HomeControllerTest.class

Dengan nama-nama kelas yang sepenuhnya memenuhi syarat menjadi unik, masalahnya hilang.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.