জুনিট ৪.7 সহ ইন্টেলিজ আইডিইএ “!!! JUnit সংস্করণ 3.8 বা তার পরে প্রত্যাশিত: "


206

আমি যখন ইন্টেলিজ আইডিইএতে নিম্নলিখিত পরীক্ষা চালানোর চেষ্টা করি তখন আমি বার্তাটি পাই:

"!!! ইউনাইট সংস্করণ 3.8 বা তার পরে প্রত্যাশিত:"

এটি লক্ষ করা উচিত যে এটি একটি অ্যান্ড্রয়েড প্রকল্প যা আমি ইন্টেলিজ আইডিইএ 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

ইন্টেলিজ 9, সর্বশেষ প্যাচ।
বেনস্টপিয়ারে

আমি এখানে সমাধান আছে stackoverflow.com/questions/29172698/...
voronnenok

সত্যই আমি অবশেষে ইন্টেলিজজে অ্যান্ড্রয়েড প্লাগইন ব্যবহার করে পাট করেছি এবং বুলেটটি বিট করেছি এবং সর্বশেষতম অ্যান্ড্রয়েড স্টুডিও ব্যবহার করি। সব জরিমানা
কারবি

তাদের পরীক্ষার ক্লাসের নামে "টেস্ট" না করে অন্য কেউ এখানে আসেন; আপনার "টেস্ট" ভাই যুক্ত করা উচিত। আপনার শ্রেণীর "গেমইজাইন" নামকরণ একই ত্রুটির কারণ হতে পারে, আপনি এটিকে "গেমজিনিস্টেস্ট" তৈরি করে সমাধান করতে পারেন। চিয়ার্স!
রিসিপিনেঙ্ক

উত্তর:


364

এই সমস্যাটি ঘটে কারণ Android প্ল্যাটফর্ম ( android.jar) ইতিমধ্যে JUnit ক্লাস রয়েছে classes আইডিইএ পরীক্ষার রানার এই ক্লাসগুলি লোড করে এবং দেখতে পান যে সেগুলি পুরানো জুনিত থেকে এসেছে, আপনি যখন টীকাযুক্ত পরীক্ষাগুলি ব্যবহার করার চেষ্টা করছেন যা নতুন JUnit এর বৈশিষ্ট্য, তাই আপনি পরীক্ষার রানার থেকে ত্রুটি পান।

সমাধানটি সহজ, খুলুন Project Structure| Modules| Dependencies, এবং উপরে সরান junit-4.7.jar, যাতে এটি ক্লাসপথে আগে আসে Android 1.6 Platform। এখন পরীক্ষা চালক খুশি হবেন কারণ এটি নতুন JUnit সংস্করণটি লোড করে।


9
মানুষকে সচেতন করার জন্য এটি এখনও অ্যান্ড্রয়েডের পরবর্তী সংস্করণগুলির একটি সমস্যা।
ক্রিস। জেনকিনস


18
আমার এখানে গ্রেডেল অ্যান্ড্রয়েড প্রকল্প রয়েছে যা এখানে বর্ণিত হিসাবে রোবলেট্রিক ব্যবহার করে: পিটারফ্রিজ.ড / অ্যান্ড্রয়েড- টেস্টিং -উইট-ইলেক্ট্রিক এবং যখন আমি অ্যান্ড্রয়েড প্ল্যাটফর্মটি ক্লাসপথে প্রথম থেকে দূরে সরিয়ে রাখি তখন আমি নিম্নলিখিত ব্যতিক্রম পাই:Class not found: "com.example.intellijgradletest.MainActivityTest"
হিথ সীমানা

7
নির্ভরশীলতার ক্রম পরিবর্তন করার জন্য আইডিইএ 14.0.3 এ, আপনার তীরগুলি ব্যবহার করা উচিত। টেনে আনুন এবং ফেলে দিন কাজ করে না।
ডেভিড.প্রেজ

4
অ্যান্ড্রয়েড স্টুডিওতে, হতাশার ফাইলগুলি স্বয়ংক্রিয়ভাবে তৈরি হয়। সুতরাং উপরে / নীচে সরানো সম্ভব নয়। এই সমস্যাটি সমাধানের জন্য কি অন্য কোনও উপায় রয়েছে?
আইএমড্রয়েড

35

এখানে চিত্র বর্ণনা লিখুন

আমার মডিউলটি জাভা গ্রন্থাগার মডিউল, সুতরাং জেআরই পরিবর্তন করে 1.8 জাভা সমস্যার সমাধান করেছে।

অথবা, আপনি অ্যান্ড্রয়েড এসডিকে'র অনুলিপিটির পরিবর্তে ওরাকলের জেডিকে 8 উল্লেখ করে মডিউল সেটিংস> এসডিকে অবস্থান> জেডিকে এর মাধ্যমেও বিশ্বব্যাপী এটি করতে পারেন।


এটি প্রকৃতপক্ষে কাজ করে এবং সমস্যার প্রসঙ্গটি বিবেচনা করে বোঝায়।
এজেন্টকনফফ

আমার ক্ষেত্রে আমার ডিফল্ট জুনিটের জন্য জেআরই পরিবর্তন করা দরকার
রাফায়েল

আরেকটি উপায়: সম্পাদনা আপনার jdk.table.xml~/Library/Preferences/AndroidStudioX.X/options/jdk.table.xmlবা C:\Users\Name\.AndroidStudioX.X\config\options\jdk.table.xmlWindows এ। নোডটি সন্ধান করুন <name value="Android API 28 Platform" />এবং এতে সেট <annotationsPath>করুন <root url="jar://$USER_HOME$/Android-SDK/platforms/android-28/data/annotations.zip!/" type="simple" />। উভয় ফাইল পথের URL- এ <classPath>নোড রয়েছে তাও নিশ্চিত করুন platforms/android-28/...। আপনার ফোল্ডারের নামের সাথে "Android-SDK" সামঞ্জস্য করুন Ad
মিঃ-আইডিই

এটি আমার পক্ষে কাজ করে! কেবলমাত্র ডিফল্ট (অ্যান্ড্রয়েড এপিআই 28) থেকে 1.8 (জাভা) এ পরিবর্তন করুন এবং এটি কার্যকর!
iiueoH

8

আমি একটি মাল্টি মডিউল প্রকল্প (libgdx) সঙ্গে এই সমস্যা ছিল। একটি মডিউল খাঁটি জাভা এবং পরীক্ষা আছে। আমার সমাধানটি ছিল আমার ইউনিট পরীক্ষার রান কনফিগারেশনে "জাভা 1.8" তে "বিকল্প জেআরই ব্যবহার করুন" সেট করা। এটি নিশ্চিত করে যে কোনও অ্যান্ড্রয়েড.জার ক্লাসপথে নেই এবং জুনিট ৪.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কেবল কনফিগার মুছে ফেলা হয় এবং আপনি যে ফাইলটি পরীক্ষা করতে চান তার উপর ডান ক্লিক করুন Runagain এটি Android Testsবিভাগের অধীনে কনফিগার তৈরি করবে এবং এটি ডিভাইস / এমুলেটরটিতে চলবে on

4
এটি আমার জন্য কাজ করেছে => এটি যদি জুনিত থাকে তবে কেবল কনফিগারটি মুছুন এবং আপনি যে ফাইলটি পরীক্ষা করতে চান সেটি ডান ক্লিক করুন এবং আবার চালান। এরপরে এটি অ্যান্ড্রয়েড টেস্ট বিভাগের অধীনে কনফিগারেশন তৈরি করবে এবং এটি ডিভাইস / এমুলেটরটিতে চলবে।
দেবেন্দ্র ওয়াজা

আমার জন্যও কাজ করেছেন। testফোল্ডার থেকে ফোল্ডারে সরানোর পরে আমি একই পরীক্ষা চালিয়েছি androidTest। অ্যান্ড্রয়েড স্টুডিওগুলি এটি করার পরে রান কনফিগারেশন আপডেট করেনি
ড্যানিল

5

অ্যান্ড্রয়েড স্টুডিওর জন্য - অ্যান্ড্রয়েড স্টুডিও 1.1 বিটা 4 থেকে শুরু করে , গুগল অ্যান্ড্রয়েড গ্রেডল প্লাগইন 1.1.0-আরসির জন্য সমর্থন যোগ করেছে । নতুন প্লাগইন জুনিট 4+ ব্যবহার করে অ্যান্ড্রয়েড স্টুডিওর মাধ্যমে ইউনিট টেস্টিং সমর্থন করে।

এটি এখনও পরীক্ষামূলক এবং এটি সেট আপ করার জন্য কিছু ম্যানুয়াল পদক্ষেপ রয়েছে


এটি কাজ করে তবে অ্যান্ড্রয়েড স্টুডিওতে এখনও পরীক্ষার জন্য স্বতঃ-উত্পাদনকারী কনফিগারেশনগুলির সাথে সমস্যা রয়েছে তাই প্রতিবার পরীক্ষার প্যাকেজটি পুনরায় নির্বাচন করে চলমান কনফিগারেশনটি ঠিক করতে হবে। অন্যথায় পরীক্ষার সময় নালপয়েন্টার এক্সসেপশন ception
আলফিশ

4

প্রত্যেকের জন্য যারা এই পোস্টটি পড়ছেন এবং এখনও অ্যান্ড্রয়েড স্টুডিও ১.০ সহ একই সমস্যা রয়েছে। আপনি অ্যান্ড্রয়েড স্টুডিওতে নির্ভরতার ক্রমটি পরিবর্তন করতে পারবেন না আইডিই সেগুলি স্বয়ংক্রিয়ভাবে পুনরায় লিখবে। এবং, আপনি .iml ফাইলটি সংশোধন করে অর্ডার পরিবর্তন করতে পরিচালিত হলেও, আপনি একটি "ক্লাস পাওয়া যায়নি ..." পাবেন। এটি কারণ অ্যান্ড্রয়েড স্টুডিওতে পরীক্ষার আউটপুট পাথ সেট করা যায় না।

আসলে, অ্যান্ড্রয়েড স্টুডিও, জুনিট এবং রোবলেট্রিক একসঙ্গে কাজ করার সমাধান রয়েছে। এই 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

দুটি ঘটনা ঘটতে ভাবতে পারি

  • যদি আপনার আইডিই কোনও অ্যান্ড্রয়েড জুনিট পরীক্ষা শুরু করার চেষ্টা করে যা সরাসরি এমুলেটরটিতে চলে আপনি জুনিট 4 ব্যবহার করতে পারবেন না।
  • যদি আপনি দুর্ঘটনাক্রমে অ্যান্ড্রয়েড জার থেকে সরবরাহিত জুনিট ক্লাসগুলি ব্যবহার করেন তবে তারা সাধারণ জেভিএম এ চালাতে পারবেন না কারণ অ্যান্ড্রয়েড ডালভিক ভিএম এর জন্য কেবল প্রকৃত সংকলিত ক্লাস রয়েছে।

1

এটি আমার সাথে অ্যান্ড্রয়েড স্টুডিও ১.১ এও ঘটেছে - যদিও এটি প্লাগইন ছাড়াই ইউনিট পরীক্ষাগুলি সমর্থন করে।

অন্যান্য মেশিনে (একই প্রকল্প, এএস এর একই সংস্করণ) আমি দেখতে পেলাম যে ইউনিট পরীক্ষা চালানোর সময়, আইডিই অ্যান্ড্রয়েড.জার ফাইলটি ক্লাসপথে যোগ করে না, যখন আমার মেশিনে এটি করে।

আমার সর্বোত্তম অনুমানটি ছিল যে আমরা রূপান্তরিত হওয়ার কারণে আমরা মাভেন থেকে গ্রেডলে এবং ইন্টেলিজ থেকে এএস এ চলে যাচ্ছিলাম সেটিংসের কিছু ক্যাশে আমার মেশিনে কোথাও থেকে গেছে যা অ্যান্ড্রয়েড.জারকে ক্লাসপথে যুক্ত করেছে।

আমি যা করেছি তা হ'ল আমার মেশিন থেকে সমস্ত অ্যান্ড্রয়েড সম্পর্কিত ক্যাশেগুলি সাফ করা (সি: \ ব্যবহারকারীদের \ ইউএসআরআই Google+ ফোল্ডার) এর অধীনে: .অ্যান্ড্রয়েড Aএন্ড্রয়েড স্টুডিও। গ্রেডেল। এম 2

এর পরে আমি প্রকল্পটি আবার খুললাম এবং পরীক্ষাগুলি কাজ করেছিল।

এখনও কী ভুল হয়েছে তা বোঝার চেষ্টা করছি, তবে আপাতত এই কৌশলটি করা উচিত।


1

অ্যান্ড্রয়েড স্টুডিও 1.5 এ আমার এই সমস্যাটি ছিল, কারণ আমি জানতাম না যে আমাকে "অ্যান্ড্রয়েড ইনস্ট্রুমেন্টেশন টেস্ট" থেকে "ইউনিট টেস্টে" "বিল্ড ভেরিয়েন্টস" (মূল উইন্ডোর নীচের বাম কোণে) "টেস্ট আর্টিফ্যাক্ট" সেটিংটি স্যুইচ করতে হয়েছিল I "। আপনি যখন করবেন, আপনি প্রকল্প উইন্ডোতে একটি উদাহরণউইনটেষ্ট.জভা ফাইলটি দেখতে পাবেন।


1

আমার একই সমস্যা ছিল তবে অন্য কারণে। আমি একটি নিয়মিত জাভা গ্রেডেল প্রকল্প (অ্যান্ড্রয়েড নয়) নিয়ে ইন্টেলিজিতে ছিলাম তবে জেডিকে অ্যান্ড্রয়েড এসডিকে সেট করা Project Structureহয়েছিল (কোনও কারণে ডিফল্ট জেডিকে ছিল)। এটি সত্যই বোবা তবে ইন্টেলিজি আমাকে কী ভুল তা বোঝাতে যথেষ্ট ভাল লাগেনি, তাই আমি তাতে আটকে গেলাম।


1

এইভাবে আমি এটি সমাধান করেছি:

কনফিগারেশনগুলি সম্পাদনা করুন -> ডিফল্ট -> অ্যান্ড্রয়েড জুনিট -> নিম্নলিখিতটি ওয়ার্কিং ডিরেক্টরিতে যুক্ত করুন:

$ MODULE_DIR $


1

আমার জন্য এই সমস্যাটি পরীক্ষার জন্য পুরানো / ভাঙা রান কনফিগারেশনের কারণে হয়েছিল। আমাকে কেবল কনফিগারেশনটি মুছতে হয়েছিল, তারপরে একটি নতুন তৈরি করতে হবে এবং সমস্যাটি ঠিক করা হয়েছিল।

পুরানো পরীক্ষার কনফিগারেশন মুছুন


0

অ্যান্ড্রয়েড প্রজেক্টে আমি কাজটি করে minifyEnabled = trueযাব তা পরিবর্তন করার পরে false


0

সরিয়ে দিলে

testOptions {
    unitTests.returnDefaultValues = true
}

আপনার থেকে build.gradleএটি কাজ করবে


0

প্রোজেক্ট স্ট্রাকচার -> প্ল্যাটফর্ম সেটিং এ যান, এসডিকে পরিবর্তন করে আমার সমস্যার সমাধান করুন 1.8 8


0

আমিও একই সমস্যার মুখোমুখি হয়েছি, বিল্ড.gradle এ পরিবর্তনের পরে এটি আমার পক্ষে ভাল কাজ করছে।

build.gradle এর ভিতরে আপনার জুনিট সংস্করণটি এতে পরিবর্তন করুন:

    testImplementation 'junit:junit:3.8'

0

আমি ক্রেজি কোডারের উত্তর অনুসরণ করেছিলাম কিন্তু নির্ভরতার মধ্যে কোনও জুনিট ফাইল প্রদর্শিত হয়নি। সুতরাং আমি http://www.java2s.com/Code/Jar/j/Downloadjunitjar.htm থেকে একটি ডাউনলোড করেছি , তারপরে ডানদিকে প্লাস বোতাম টিপে এটি যুক্ত করেছি। এবং এটা কাজ করে


0

প্রজেক্ট স্ট্রাকচার / এসডিকে লোকেশনে "এম্বেডেড জেডিকে ব্যবহার করুন" বন্ধ করা হ'ল যা আমার ক্ষেত্রে সহায়তা করেছে তবে আমি ঠিক জানি না যে এটি প্রথম স্থানে ব্যর্থ হওয়ার কারণ কী ছিল।


0

আপনার প্রতিস্থাপন android.jar মধ্যে লিব সর্বশেষ এক সঙ্গে ফোল্ডার। আপনি এখান থেকে ডাউনলোড করতে পারেন


0

অ্যান্ড্রয়েড স্টুডিওতে, Open Project Structure -> SDK Locationআপনি JDKঅবস্থানটি দেখতে পারবেন , প্রয়োগ করতে নিজের মালিকানাধীন "এম্বেডেড জেডিকে ব্যবহার করুন " ব্যবহারJDK করতে পারেন, তারপরে "এম্বেডেড জেডিকে ব্যবহার করুন" এ ফিরে যান , এটি সম্ভবত কাজ


0

আমার ক্ষেত্রে, পরিবর্তন JREমধ্যে Run Configurationsডোজ সমস্যা সমাধানের কিন্তু যখন আমি পরীক্ষা ফাংশন পাশে রান বাটন ক্লিক JREঅপশন ডিফল্টে রিসেট হবে।

অবশেষে, @ ক্র্যাজিলিউ'র উত্তরের মতো Project Structure - SDK Location - JDK, নির্বাচন করুন Embedded JDK। কারণ অ্যান্ড্রয়েড স্টুডিও ৩.6-তে কোনও চেকবক্স নেই।


0

আমি একই বার্তা পেয়েছি

JUnit version 3.8 or later expected

একটি সাধারণ সূচনা ভুল দ্বারা। আমি একটি প্যাকেজের জন্য একই প্যাকেজের নাম এবং শ্রেণীর নাম src / main এবং src / পরীক্ষায় ব্যবহার করেছি (আমার ক্ষেত্রে HomeController ক্লাস):

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!

তার সাথে, এসআরসি / প্রধান হোম কন্ট্রোলার শ্রেণি, পাশাপাশি এসসিআর / পরীক্ষার হোমকন্ট্রোলার শ্রেণীর একই পুরো পথ ছিল:

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

এখন পুরোপুরি যোগ্যতাসম্পন্ন শ্রেণীর নাম আলাদা হয়। এসসিআর / প্রধান হোম কন্ট্রোলার শ্রেণীর নাম:

com.example.controller.HomeController.class

এবং এসসিআর / পরীক্ষা হোমঅ্যান্ট্রোলারস্টেস্ট শ্রেণীর নাম:

com.example.test.controller.HomeControllerTest.class

পুরোপুরি যোগ্যতাসম্পন্ন শ্রেণীর নামগুলি অনন্য হওয়ার সাথে সাথে সমস্যাটি অদৃশ্য হয়ে যায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.