Junit 4.7 ile IntelliJ IDEA “!!! JUnit sürüm 3.8 veya üstü bekleniyor: ”


206

IntelliJ IDEA'da aşağıdaki testi çalıştırmaya çalıştığımda mesajı alıyorum:

"!!! JUnit sürüm 3.8 veya üzeri bekleniyor:"

Bunun IntelliJ IDEA 9'da üzerinde çalıştığım bir Android projesi olduğu unutulmamalıdır .

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

Tam yığın izlemesi şöyle görünür ...

!!! 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, en yeni yama.
benstpierre


Dürüst olmak gerekirse nihayet IntelliJ'de Android eklentisini kullanmaya ve mermiyi ısırmaya ve en son Android Studio'yu kullanmaya başladım. her şey
Kirby

Test sınıfının adında "Test" olmadan başka birinin buraya gelmesi durumunda; "Test" kardeşini eklemelisin. Sınıfınıza "GameEngine" adını vermek aynı hataya neden olur, "GameEngineTest" yaparak çözebilirsiniz. Şerefe!
recepinanc

Yanıtlar:


364

Bu sorun, Android Platform ( android.jar) zaten JUnit sınıfları içerdiğinden oluşur. IDEA test çalıştırıcısı bu sınıfları yükler ve yeni JUnit'in bir özelliği olan ek açıklamalı testleri kullanmaya çalışırken, bu nedenle test çalıştırıcısından hatayı alırsınız.

Çözüm basit, Project Structure| Modules| Dependenciesve junit-4.7.jaryukarı taşı , böylece sınıf yolunda daha önce gelir Android 1.6 Platform. Şimdi test koşucusu yeni JUnit sürümünü yüklediği için mutlu olacak.


9
Sadece insanları haberdar etmek için bu hala android sonraki sürümleri ile ilgili bir sorundur.
Chris.Jenkins

test bağımlılıklarından sonra android sağlanan bağımlılığı yerleştirerek maven de sorunu çözdü
avianey

18
Burada açıklandığı gibi robolektrik kullanan bir gradle android projem var: peterfriese.de/android-testing-with-robolectric ve Android Platform'u sınıf yolunda 1'den uzağa taşıdığımda, aşağıdaki istisnayı alıyorum:Class not found: "com.example.intellijgradletest.MainActivityTest"
Heath Borders

7
Bağımlılık sırasını değiştirmek için IDEA 14.0.3'te okları kullanmalısınız. Sürükle ve Bırak çalışmıyor.
david.perez

4
Android stüdyosunda bağımlılık dosyaları otomatik olarak oluşturulur. Bu nedenle yukarı / aşağı hareket etmek mümkün değildir. Bu sorunu çözmenin başka bir yolu var mı?
iMDroid

35

resim açıklamasını buraya girin

benim modül bir java kütüphane modülü, bu yüzden JRE 1.8 java değiştirmek sorunu çözdü.

Veya bunu Android SDK'nın kopyası yerine Oracle'ın JDK 8'ini belirterek Modül Ayarları> SDK Konumu> JDK aracılığıyla global olarak da yapabilirsiniz.


Sorun bağlamında bu gerçekten işe yarar ve mantıklı.
AgentKnopf

Benim durumumda JRE'yi Varsayılanlar'daki Junit için değiştirmem gerekiyordu
Rafael

Bir başka yöntem de düzenleyin jdk.table.xml de ~/Library/Preferences/AndroidStudioX.X/options/jdk.table.xmlveya C:\Users\Name\.AndroidStudioX.X\config\options\jdk.table.xmlWindows üzerinde. Düğümünü bulun <name value="Android API 28 Platform" />ve set <annotationsPath>To <root url="jar://$USER_HOME$/Android-SDK/platforms/android-28/data/annotations.zip!/" type="simple" />. Ayrıca <classPath>düğümün platforms/android-28/...her iki dosya yolu URL'sinde bulunduğundan emin olun. "Android-SDK" yı klasör adınıza ayarlayın.
Mr-IDE

Bu benim için çalışıyor! Sadece Varsayılan (Android API 28) 1.8 (Java) değiştirin ve işe yarıyor!
aiueoH

8

Çok modüllü bir proje (libgdx) ile bu sorunu vardı. Bir modül saf Java'dır ve testleri vardır. Çözümüm, birim testlerimin çalışma yapılandırmasında "alternatif JRE kullan" ı "Java 1.8" olarak ayarlamaktı. Bu, sınıf yolunda hiçbir android.jar olmadığından ve junit 4.x koşucusunun kullanıldığından emin olur.


Gerçekten 1.8 kullanmanıza gerek yok. Android sdk ile birlikte gelmeyen 1.7'yi seçmek yeterlidir.
Kingston

8

Her ikisini de oluştururken aynı hatayı aldım Unit Testve Android Instrument TestAndroid Studio 1.4+ ve kafası karışmaya başladı. Bu hata önlemek için emin test sınıfı kapsamına giren bir marka Android TestsüzerindeRun/Debug Configurations

  1. Talimatı düzgün bir şekilde izlediğinizden emin olun https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html
  2. Emin olun Test Artifactiçinde Build VariantsayarlandığındaAndroid Instrumentation Tests
  3. Menü Run>Edit Configuration
  4. Sınıf / yöntem adınızın Android Testsyerine içeride olduğundan emin olunJUnit
  5. O ise JUnitbasitçe test ve istediğiniz dosya üzerinde yapılandırma ve sağ klik silin Runtekrar. Daha sonra yapılandırma altındaki yapılandırmayı oluşturur Android Testsve cihaz / emülatörde çalışır.

4
BU BENİM İÇİN ÇALIŞTI => Eğer JUnit ise yapılandırmayı silin ve test etmek istediğiniz dosyaya sağ tıklayın ve tekrar çalıştırın. Daha sonra yapılandırmayı Android Testler bölümünde oluşturacak ve cihaz / emülatörde çalışacaktır.
Devendra Vaja

Benim için de çalıştı. Aynı testi testklasörden klasöre taşıdıktan sonra çalıştırdım androidTest. Android Studio bunu yaptıktan sonra çalıştırma yapılandırmasını güncellemedi
Daniil

5

Android Studio için - Android Studio 1.1 Beta 4'ten başlayarak Google, Android Gradle eklentisi 1.1.0-RC için destek ekledi . Yeni eklenti, junit 4+ kullanarak Android Studio üzerinden Birim Testini destekler.

Bu hala deneyseldir ve bunu ayarlamak için bazı manuel adımlar vardır .


Çalışıyor, ancak Android Studio'nun testler için otomatik oluşturma yapılandırmalarıyla ilgili sorunları var, bu nedenle test paketini yeniden seçerek çalışan yapılandırmayı her defasında düzeltmeniz gerekir. Aksi takdirde, test çalışması sırasında NullPointerException.
Alfishe

4

Bu yazıyı okuyan ve AndroidStudio 1.0 ile aynı sorunu yaşayan herkes için. AndroidStudio'da IDE'nin otomatik olarak yeniden yazması bağımlılık sırasını değiştiremezsiniz. Ve, .iml dosyasını değiştirerek sıralamayı değiştirseniz bile, bir "sınıf bulunamadı ..." alırsınız. Bunun nedeni Test çıkış yolunun AndroidStudio'da ayarlanamamasıdır.

Aslında, AndroidStudio, Junit ve Robolectric'in birlikte çalışmasını sağlamak için bir çözüm var. Bu https://github.com/JCAndKSolutions/android-unit-test adresine bir göz atın ve bu eklentiyi de kullanın: https://github.com/evant/android-studio-unit-test-plugin

Benim için mükemmel çalışıyor.


2

Kendi junit paketimi oluşturduğumda aynı hatayı aldım

resim açıklamasını buraya girin

Bunu düzeltmek için, burada açıklandığı gibi uygulama gradle dosyama bu iki satırı ekledim :

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

1

Olmasını hayal edebileceğim iki şey var

  • IDE'niz doğrudan emülatörde çalışan bir Android Junit testi başlatmaya çalışırsa Junit4'ü kullanamazsınız.
  • Yanlışlıkla android kavanozdan sağlanan junit sınıflarını kullandıysanız, android dalvik vm için sadece gerçek derlenmiş sınıflar olduğu için normal bir jvm'de çalışamazlar.

1

Bu, Android Studio 1.1'de de oldu - eklenti olmadan birim testlerini desteklemesine rağmen.

Diğer makinelerde (aynı proje, AS'nin aynı sürümü) Birim testlerini çalıştırırken, IDE'nin makinemde yaparken android.jar dosyasını sınıfyoluna eklemediğini buldum.

En iyi tahminim Maven'den Gradle'a yaptığımız dönüşüm ve intellij'den AS'ye geçiş nedeniyle, makinemde android.jar'ın sınıfyoluna eklenmesine neden olan bazı ayarlar önbelleği kaldı.

Yaptığım şey, android ile ilgili tüm önbellekleri makinemden temizlemek (c: \ users \ USRE_NAME klasörü altında): .android .AndroidStudio .gradle .m2

Bundan sonra projeyi tekrar açtım ve testler işe yaradı.

Hala neyin yanlış gittiğini anlamaya çalışıyorum, ama bu şimdilik hile yapmalı.


1

Android Studio 1.5'te bu sorunu yaşadım, çünkü "Yapı Varyantları" ndaki (ana pencerenin sol alt köşesi) "Test Yapısı" ayarını "Android Enstrümantasyon Testleri" nden "Birim Testleri" ne değiştirmem gerektiğini bilmiyordum ". Bunu yaptığınızda, Proje penceresinde bir SampleUnitTest.java dosyası görebilirsiniz.


1

Aynı sorunu yaşadım ama başka bir nedenden dolayı. IntelliJ'de düzenli bir java gradle projesi (android değil) ile çalıştım, ancak JDK Android SDK'ya ayarlandı Project Structure(bazı nedenlerden dolayı varsayılan JDK idi). Bu gerçekten aptalca ama IntelliJ bana neyin yanlış olduğunu gösterecek kadar iyi değildi, bu yüzden buna takıldım.


1

Ben böyle çözdüm:

Yapılandırmaları Düzenle -> Varsayılanlar -> Android JUnit -> Çalışma Dizini'ne aşağıdakileri ekleyin:

$ MODULE_DIR $


1

Benim için bu sorun, sınamalar için eski / bozuk bir çalışma yapılandırmasından kaynaklandı. Sadece yapılandırmayı silmek, sonra yeni bir tane oluşturmak zorunda kaldım ve sorun düzeltildi.

Eski test yapılandırmasını silme


0

Android projesinde minifyEnabled = true, falseçalıştığım her şeye değiştirdikten sonra yaşadım .


0

Kaldırırsan

testOptions {
    unitTests.returnDefaultValues = true
}

senin dan build.gradleişe yarayacak


0

Proje Yapısı -> Platform Ayarı'na gidin, SDK'ları 1.8 olarak değiştirin sorunumu çözdü.


0

Ben de aynı sorunla karşı karşıya kaldım, build.gradle'a geçtikten sonra benim için iyi çalışıyor.

build.gradle içindeki junit sürümünüzü şu şekilde değiştirin:

    testImplementation 'junit:junit:3.8'


0

Proje Yapısı / SDK Konumunda "Katıştırılmış JDK Kullan" seçeneğini kapatmak benim durumumda yardımcı oldu, ancak ilk etapta başarısız olmasının nedeninin tam olarak ne olduğunu bilmiyorum.


0

Senin yerine android.jar içinde kütüphanelerini yeni biri ile klasörü. Buradan indirebilirsiniz


0

AndroidStudio'da, konumu Open Project Structure -> SDK Locationgörebilir JDK, uygulayabileceğiniz "Katıştırılmış JDK kullan" seçeneğini kullanabilir JDK, ardından "Katıştırılmış JDK kullan" olarak değiştirebilirsiniz , belki işe yarar


0

Benim durumumda, değişim JREiçinde Run Configurationsdoz sorunu çözmek, ama ben testi işlevine sonraki çalıştırma butonu tıklandığında JREseçenekler varsayılan olarak sıfırlanır.

Son olarak, @CrazyLiu'nun cevabına benzer şekilde Project Structure - SDK Location - JDK, öğesini seçin Embedded JDK. Çünkü Android Studio 3.6'da onay kutusu yok.


0

Ben de aynı mesajı aldım

JUnit version 3.8 or later expected

basit bir başlangıç ​​hatasıyla. Bir sınıf (benim durumumda HomeController sınıfı) için src / main ve src / test üzerinde aynı paket adlarını ve sınıf adlarını kullanmıştım:

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!

Bununla, src / main HomeController sınıfı ve src / test HomeController sınıfı aynı tam yola sahipti:

com.example.controller.HomeController.class

Sonuç: HomeController sınıfına bağımlı olan tüm testler başarısız oldu.

Paket adını ve / veya sınıf adını değiştirmek sorunu çözdü. Burada örnek, her ikisi de, paket adı ve sınıf adı değiştirildiğinde:

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

Şimdi tam nitelikli sınıf isimleri farklı. Src / main HomeController sınıf adı:

com.example.controller.HomeController.class

ve src / test HomeHontrollerTest sınıf adı:

com.example.test.controller.HomeControllerTest.class

Tam nitelikli sınıf isimleri benzersiz olduğunda sorun ortadan kalkar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.