4.7 के साथ IntelliJ IDEA "!!! JUnit संस्करण 3.8 या बाद में अपेक्षित: "


206

जब मैं IntelliJ IDEA में निम्नलिखित परीक्षण चलाने का प्रयास करता हूं तो मुझे संदेश मिलता है:

"!!! JUnit संस्करण 3.8 या बाद में अपेक्षित:"

यह ध्यान दिया जाना चाहिए कि यह एक Android परियोजना है जिसे मैं 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());
    }
}

पूरा स्टैक ट्रेस इस तरह दिखता है ...

!!! 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, नवीनतम पैच।
बेन्स्टीपर्रे

मेरे पास यहाँ समाधान है stackoverflow.com/questions/29172698/…
voronnenok

ईमानदारी से मैं अंत में IntelliJ में एंड्रॉइड प्लगइन का उपयोग करने और बुलेट को बिट करने और नवीनतम एंड्रॉइड स्टूडियो का उपयोग करने पर गर्व करता हूं। सब ठीक है
किर्बी

किसी और को अपने टेस्ट क्लास के नाम में "टेस्ट" किए बिना यहाँ आएँ; आपको "टेस्ट" जोड़ना चाहिए भाई। अपनी कक्षा को "GameEngine" नाम देना एक ही त्रुटि का कारण होगा, आप इसे "GameEngineTest" बनाकर हल कर सकते हैं। चीयर्स!
प्राप्तांक

जवाबों:


364

यह समस्या इसलिए होती है क्योंकि Android प्लेटफ़ॉर्म ( android.jar) में पहले से ही JUnit कक्षाएं हैं। IDEA टेस्ट धावक इन कक्षाओं को लोड करता है और देखता है कि वे पुराने JUnit से हैं, जबकि आप एनोटेट परीक्षण का उपयोग करने की कोशिश कर रहे हैं जो कि नए JUnit की एक विशेषता है, इसलिए आपको परीक्षण धावक से त्रुटि मिलती है।

समाधान सरल है, खोलें Project Structure| Modules| Dependencies, और junit-4.7.jarऊपर ले जाएँ , ताकि यह आए Android 1.6 Platform क्लासपाथ में पहले । अब टेस्ट रनर खुश होगा क्योंकि यह नए JUnit वर्जन को लोड करता है।


9
बस लोगों को जागरूक करने के लिए यह अभी भी Android के बाद के संस्करणों के साथ एक मुद्दा है।
क्रिस.जेकिन्स 17

परीक्षण निर्भरता के बाद एंड्रॉइड प्रदान की निर्भरता प्रदान करके
मावेन

18
मेरे पास एक ग्रैडल एंड्रॉइड प्रोजेक्ट है जो यहां वर्णित के रूप में रोबोइलेक्ट्रिक का उपयोग करता है: peterfriese.de/android-testing-with-robolectric और जब मैं एंड्रॉइड प्लेटफॉर्म को क्लासपाथ में 1 से दूर ले जाता हूं, तो मुझे निम्न अपवाद मिलते हैंClass not found: "com.example.intellijgradletest.MainActivityTest"
हीथ बॉर्डर्स

7
निर्भरता क्रम को बदलने के लिए IDEA 14.0.3 में, आपको तीर का उपयोग करना चाहिए। ड्रैग एंड ड्रॉप काम नहीं करता है।
david.perez

4
एंड्रॉइड स्टूडियो में, डिपेंडेंसी फाइलें ऑटोजेनरेटेड होती हैं। इसलिए ऊपर / नीचे जाना संभव नहीं है। क्या इस मुद्दे को हल करने के लिए कोई अन्य तरीका है?
IMDroid

35

यहां छवि विवरण दर्ज करें

मेरा मॉड्यूल एक जावा लाइब्रेरी मॉड्यूल है, इसलिए जेआरई को 1.8 जावा में बदलने से समस्या हल हो गई।

या, आप इसे एंड्रॉइड एसडीके की कॉपी के बजाय ओरेकल के जेडीके 8 को निर्दिष्ट करते हुए मॉड्यूल सेटिंग्स> एसडीके स्थान> जेडडीके के माध्यम से विश्व स्तर पर भी कर सकते हैं।


यह वास्तव में काम करता है और समस्या के संदर्भ में भी समझ में आता है।
एजेंटकॉन्फ

मेरे मामले में मुझे डेफॉल्ट्स में
राफेल

दूसरा तरीका: अपने jdk.table.xml को विंडोज पर ~/Library/Preferences/AndroidStudioX.X/options/jdk.table.xmlया उस पर एड करें C:\Users\Name\.AndroidStudioX.X\config\options\jdk.table.xml। नोड ढूंढें <name value="Android API 28 Platform" />और इसके <annotationsPath>लिए सेट करें <root url="jar://$USER_HOME$/Android-SDK/platforms/android-28/data/annotations.zip!/" type="simple" />। यह भी सुनिश्चित करें कि <classPath>नोड platforms/android-28/...में दोनों फ़ाइल पथ URL शामिल हैं। "एंड्रॉइड-एसडीके" को अपने फ़ोल्डर नाम में समायोजित करें।
श्री-आईडीई

यह मेरे लिए काम करता है! बस डिफ़ॉल्ट (Android API 28) से 1.8 (जावा) में बदलें और यह काम करता है!
एआईयूओएचएच

8

मुझे मल्टी मॉड्यूल प्रोजेक्ट (libgdx) के साथ यह समस्या थी। एक मॉड्यूल शुद्ध जावा है और इसमें परीक्षण हैं। मेरा समाधान मेरी इकाई परीक्षणों के रन कॉन्फ़िगरेशन में "जावा जावा" के लिए "वैकल्पिक जेआरई" का उपयोग करना था। यह सुनिश्चित करता है कि कोई android.jar classpath पर नहीं है और junit 4.x रनर का उपयोग किया जाता है।


आपको वास्तव में 1.8 का उपयोग करने की आवश्यकता नहीं है। यह 1.7 चुनने के लिए पर्याप्त है जो एंड्रॉइड एसडीके के साथ नहीं आता है।
किंग्स्टन

8

जब दोनों बनाने मैं एक ही त्रुटि मिली Unit Testऔर Android Instrument Testएंड्रॉयड स्टूडियो 1.4 + में और यह भ्रमित करने के लिए शुरू कर दिया। इस त्रुटि से बचने के लिए सुनिश्चित करें कि आपका परीक्षण वर्ग नीचे Android TestsहैRun/Debug Configurations

  1. सुनिश्चित करें कि आप निर्देशों का ठीक से पालन करते हैं https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html
  2. सुनिश्चित करें कि Test Artifactमें Build Variantsसेट हैAndroid Instrumentation Tests
  3. मेनू Run> पर क्लिक करेंEdit Configuration
  4. सुनिश्चित करें कि आपकी कक्षा / विधि का नाम Android Testsइसके बजाय अंदर हैJUnit
  5. यदि यह JUnitकेवल कॉन्फिग को डिलीट करता है और उस फाइल पर राइट क्लिक करें जिसे आप टेस्ट करना चाहते हैं और Runफिर से। यह तब Android Testsसेक्शन के तहत कॉन्फिगरेशन बनाएगा और यह डिवाइस / एमुलेटर पर रन करेगा।

4
यह मेरे लिए काम कर रहा है => यदि यह ज्यूनिट में है तो बस उस कॉन्फिग को डिलीट कर दें और जिस फाइल को आप टेस्ट करना चाहते हैं उस पर राइट क्लिक करें और फिर से रन करें। यह तब एंड्रॉइड टेस्ट सेक्शन के तहत कॉन्फिगरेशन बनाएगा और यह डिवाइस / एमुलेटर पर चलेगा।
देवेंद्र वाजा

मेरे लिए भी काम किया। मैंने इसे testफ़ोल्डर से फ़ोल्डर में ले जाने के बाद एक ही परीक्षण चलाया androidTest। Android Studio ने ऐसा करने के बाद रन कॉन्फ़िगरेशन को अपडेट नहीं किया
Daniil

5

एंड्रॉइड स्टूडियो के लिए - एंड्रॉइड स्टूडियो 1.1 बीटा 4 से शुरू होकर , Google ने एंड्रॉइड ग्रैडल प्लगइन 1.1.0-RC के लिए समर्थन जोड़ा है । नया प्लगइन 4+ का उपयोग करके एंड्रॉइड स्टूडियो के माध्यम से यूनिट परीक्षण का समर्थन करता है।

यह अभी भी प्रायोगिक है और इसे स्थापित करने के लिए कुछ मैनुअल चरण हैं


यह काम करता है लेकिन एंड्रॉइड स्टूडियो में अभी भी परीक्षणों के लिए ऑटो-जनरेटिंग कॉन्फ़िगरेशन के साथ समस्याएं हैं इसलिए हर बार आपको परीक्षण पैकेज को फिर से चयन करके चल रहे कॉन्फ़िगरेशन को ठीक करना होगा। अन्यथा NullPointerException टेस्ट रन के दौरान।
अल्फीशे

4

हर कोई जो इस पोस्ट को पढ़ रहा है और अभी भी AndroidStudio 1.0 के साथ एक ही मुद्दा है। आप AndroidStudio में निर्भरता क्रम को बदल नहीं सकते हैं आईडीई ने उन्हें स्वचालित रूप से फिर से लिखा है। और, भले ही आप .iml फ़ाइल को संशोधित करके आदेश को बदलने का प्रबंधन करते हैं, तो आपको "वर्ग नहीं मिला ..." मिलेगा। ऐसा इसलिए है क्योंकि AndroidStudio पर परीक्षण आउटपुट पथ सेट नहीं किया जा सकता है।

दरअसल, AndroidStudio, Junit और Robolectric को एक साथ काम करने के लिए समाधान है। इस https://github.com/JCAndKSolutions/android-unit-test पर नज़र डालें और साथ ही इस प्लगइन का उपयोग करें: https://github.com/evant/android-studio-unit-test-plugin

मेरे लिए पूरी तरह से काम करता है।


2

मुझे वही त्रुटि मिली है जब मैंने अपना खुद का जूनिट पैकेज बनाया है

यहां छवि विवरण दर्ज करें

इसे ठीक करने के लिए, मैंने अपनी ऐप ग्रेड फ़ाइल में इन दो पंक्तियों को जोड़ा है जैसा कि यहाँ बताया गया है :

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

1

वहाँ दो चीजें हैं जो मैं होने की कल्पना कर सकता था

  • यदि आपका IDE एंड्रॉइड जूनिट टेस्ट शुरू करने की कोशिश करता है जो सीधे एमुलेटर पर चलता है तो आप Junit4 का उपयोग नहीं कर सकते।
  • यदि आपने गलती से एंड्रॉइड जार से प्रदान किए गए जूनट वर्गों का उपयोग किया है, तो वे सामान्य जेवीएम पर नहीं चल सकते हैं क्योंकि एंड्रॉइड दलविक वीएम के लिए केवल वास्तविक संकलित कक्षाएं हैं।

1

यह मेरे साथ-साथ एंड्रॉइड स्टूडियो 1.1 में भी हुआ - हालांकि इसे प्लगइन के बिना यूनिट परीक्षणों का समर्थन करना चाहिए।

अन्य मशीनों पर (एक ही परियोजना, एएस का एक ही संस्करण) मैंने पाया कि इकाई परीक्षण चलाते समय, आईडीई android.jar फ़ाइल को क्लासपाथ में नहीं जोड़ता है, जबकि मेरी मशीन में ऐसा होता है।

मेरा सबसे अच्छा अनुमान यह था कि हमने रूपांतरण के कारण मावेन से ग्रैडल किया और इंटेलीज से एएस की ओर बढ़ते हुए कुछ कैश मेरी मशीन में कहीं न कहीं रहे जिससे android.jar को क्लासपाथ में जोड़ा गया।

मैंने जो कुछ भी किया है वह मेरी मशीन (c: \ users \ USRE_NAME फ़ोल्डर के तहत) से सभी एंड्रॉइड से संबंधित कैश को साफ़ करने के लिए है। andandroid .AndroidStudio .gradle .mle

उसके बाद मैंने इस परियोजना को फिर से खोल दिया और परीक्षणों ने काम किया।

फिर भी समझने की कोशिश कर रहा है कि क्या गलत हुआ, लेकिन यह अभी के लिए चाल चलनी चाहिए।


1

एंड्रॉइड स्टूडियो 1.5 में मेरा यह मुद्दा था, क्योंकि मुझे नहीं पता था कि मुझे "एंड्रॉइड इंस्ट्रूमेंटेशन टेस्ट" से "यूनिट इंस्ट्रूमेंट्स" के "बिल्ड वेरिएंट" (मुख्य विंडो के निचले बाएं कोने) में "टेस्ट आर्टवर्क" सेटिंग को बदलना पड़ा था "। जब आप करते हैं, तो आप प्रोजेक्ट विंडो में एक ExampleUnitTest.java फ़ाइल देख सकते हैं।


1

मुझे भी यही समस्या थी लेकिन दूसरे कारण से। मैं एक नियमित जावा ग्रेडल प्रोजेक्ट (एंड्रॉइड नहीं) के साथ इंटेलीजे पर था, लेकिन जेडीके एंड्रॉइड एसडीके में सेट किया गया Project Structureथा (कुछ कारणों से डिफ़ॉल्ट जेडडीके था)। यह वास्तव में गूंगा है, लेकिन इंटेलीज मुझे यह बताने के लिए पर्याप्त नहीं था कि क्या गलत है, इसलिए मैं उस पर अटक गया।


1

यह मैंने इसे कैसे हल किया:

संपादन कॉन्फ़िगरेशन -> डिफ़ॉल्ट -> Android JUnit -> कार्य निर्देशिका में निम्न जोड़ें:

$ MODULE_DIR $


1

मेरे लिए यह समस्या परीक्षणों के लिए एक पुरानी / टूटी हुई कॉन्फ़िगरेशन के कारण हुई थी। मुझे बस कॉन्फ़िगरेशन को हटाना था, फिर एक नया बनाएं और समस्या ठीक हो गई।

पुराने परीक्षण कॉन्फ़िगरेशन हटाएं


0

एंड्रॉइड प्रोजेक्ट में मेरे पास काम minifyEnabled = trueकरने के बाद मैंने इसे बदल दिया false


0

यदि आप हटाते हैं

testOptions {
    unitTests.returnDefaultValues = true
}

आपके build.gradleकाम से


0

प्रोजेक्ट संरचना पर जाएं -> प्लेटफ़ॉर्म सेटिंग, एसडीके को 1.8 में बदलें मेरी समस्या का समाधान हो गया।


0

मैं भी इसी मुद्दे का सामना कर रहा था, build.gradle में बदलने के बाद यह मेरे लिए ठीक काम कर रहा है।

build.gradle के अंदर अपना जूनियर संस्करण बदलें:

    testImplementation 'junit:junit:3.8'

0

मैंने क्रेजीकॉडर के उत्तर का पालन किया, लेकिन निर्भरता में दिखाया गया कोई भी जूनियर फ़ाइल नहीं थी। इसलिए मैंने http://www.java2s.com/Code/Jar/j/Downloadjunitjar.htm से एक डाउनलोड किया , फिर दाईं ओर प्लस बटन दबाकर इसे जोड़ा। और इसने काम किया


0

प्रोजेक्ट स्ट्रक्चर / SDK लोकेशन में "एम्बेडेड एम्बेडेड JDK का उपयोग करें" को बंद करने से मेरे मामले में मदद मिली है, लेकिन मुझे नहीं पता कि यह क्या कारण था जो पहली बार में विफल हो रहा था।


0

अपने android.jar को लेबर फोल्डर में लेटेस्ट के साथ बदलें । आप इसे यहाँ से डाउनलोड कर सकते हैं


0

AndroidStudio में Open Project Structure -> SDK Location, आप JDKस्थान, परिवर्तन का उपयोग कर सकते हैं "उपयोग एम्बेडेड JDK" आप JDKको लागू करने के लिए खुद , तो वापस "एम्बेडेड JDK का उपयोग करें" के लिए , यह शायद काम है


0

मेरे मामले में, खुराक JREमें परिवर्तन Run Configurationsसे समस्या का समाधान हो जाता है, लेकिन जब मैं परीक्षण फ़ंक्शन के बगल में रन बटन पर क्लिक करता हूं, तो JREविकल्प डिफ़ॉल्ट पर रीसेट हो जाएंगे।

अंत में, @CrazyLiu के उत्तर के समान, में Project Structure - SDK Location - JDK, चुनें Embedded JDK। क्योंकि एंड्रॉइड स्टूडियो 3.6 में कोई चेकबॉक्स नहीं है।


0

मुझे वही संदेश मिला

JUnit version 3.8 or later expected

एक साधारण शुरुआतकर्ता की गलती से। मैंने src / main और src / test पर एक ही पैकेज के नाम और वर्ग के नाम का उपयोग एक वर्ग के लिए किया था (मेरे मामले में होमकंट्रोलर वर्ग):

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!

उस के साथ, src / main होमकंट्रोलर क्लास, साथ ही src / टेस्ट होमकंट्रोलर क्लास, का एक ही पूरा रास्ता था:

com.example.controller.HomeController.class

नतीजा: होमकंट्रोलर वर्ग पर निर्भर कोई भी परीक्षण विफल रहा है।

या तो पैकेज नाम और / या वर्ग नाम बदलने से समस्या हल हो गई है। यहां उदाहरण, जब दोनों, पैकेज का नाम और वर्ग नाम बदला जाता है:

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

अब पूरी तरह से योग्य वर्ग के नाम अलग हैं। Src / मुख्य होमकंट्रोलर वर्ग का नाम है:

com.example.controller.HomeController.class

और src / परीक्षण HomeHontrollerTest वर्ग का नाम है:

com.example.test.controller.HomeControllerTest.class

पूरी तरह से योग्य वर्ग के नाम अद्वितीय होने के साथ, समस्या गायब हो जाती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.