AndroidJUnit4.class হ্রাস করা হয়েছে: androidx.test.ext. জুনit.runners.AndroidJUnit4 কীভাবে ব্যবহার করবেন?


254

আমার উপকরণ পরীক্ষার জন্য আমি ব্যবহার করছিলাম

@RunWith(AndroidJUnit4.class)

থেকে

import androidx.test.runner.AndroidJUnit4;

যাতে আমার পরীক্ষার মামলা প্রতিষ্ঠিত হয়। এখন এই লাইন হিসেবে ইঙ্গিতটি ব্যবহার করার জন্য অন্তর্ভুক্ত অবচিত চিহ্নিত পরার AndroidJUnit4থেকে

import androidx.test.ext.junit.runners.AndroidJUnit4

তবে আমি যদি AndroidJUnit4নামযুক্ত প্যাকেজ থেকে আমদানি করার চেষ্টা করি তবে আমি ত্রুটি পেয়েছি, এটি extসমাধান করা যায় না।

আপনার কী ধারণা আছে, এই সমস্যাটি সমাধানের জন্য গ্রেডের মধ্যে কোন প্যাকেজ অন্তর্ভুক্ত করা উচিত?



4
আমি মনে করি আপনার উত্সটি অপ্রচলিত, তারা মোটেই অ্যান্ড্রয়েডেক্স উল্লেখ করে না।
মার্সেল গাঙ্গভিশ

1
অ্যান্ড্রয়েডে ইউনিট টেস্টিং বাগ এবং অবমূল্যায়নের একটি সম্পূর্ণ জগাখিচুড়ি। আমার পক্ষে কাজ করা একমাত্র নতুন স্ক্র্যাচ প্রকল্প তৈরি করা that প্রকল্প থেকে খনিতে প্রাসঙ্গিক ফাইলগুলি অনুলিপি করা, ডিবাগ মোডে স্যুইচ করা এবং একটি সম্পূর্ণ ক্যাশে অবৈধকরণ করা। এছাড়াও AndroidJUnit4 পরীক্ষার জন্য প্যাকেজের নামটি লাইব্রেরির প্যাকেজের নামের সাথে মেলে।
রূপার্ট রাউসলে

উত্তর:


375

AndroidJUnit4 এর জন্য ডকুমেন্টেশন অনুসারে ,

  1. গ্রেড ফাইলটিতে নিম্নলিখিত লাইনটি থাকা উচিত: androidTestImplementation 'androidx.test.ext:junit:1.1.1'

  2. AndroidJUnit4ClassRunnerথেকে পরীক্ষার শ্রেণি পরিবর্তন করুনAndroidJUnit4

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


20
আমার গ্রেড এ আছে এবং এখনও সমস্যা সমাধান করতে পারে না।
zuko

@ জুকো আপনার প্রকল্পটি পরিষ্কার এবং / অথবা পুনর্নির্মাণ করুন, এটি সেখানে হওয়া উচিত। যদি এখনও না হয় এবং আপনি মডিউলগুলি ব্যবহার করছেন তবে আপনার নির্ভরতার স্তরক্রমটি আপনার প্রত্যাশার মতো সেটআপ হয়েছে কিনা তা যাচাই করুন; আপনার এগুলি শীর্ষ স্তরের মডিউলগুলিতেও যুক্ত করতে হবে — যেহেতু পরীক্ষার পাঠাগারগুলি আপস্ট्रीम মডিউলগুলি ব্যবহারের জন্য ভাগ করা মডিউলগুলিতে সংকলিত হয়নি।
জন অ্যাডামস

@ জোন অ্যাডামস আমার নির্ভরতা গাছটি কোনও কারণে পুরানো লাইব্রেরিগুলির একটি রেফারেন্স ধরে রেখেছিল যদিও আমি ভেবেছিলাম যে আমি সেগুলি সরিয়েছি। সুতরাং বিভিন্ন জিনিস চেষ্টা করার পরে আমি কেবলমাত্র একটি নতুন প্রকল্পে স্থানান্তরিত শেষ করেছি এবং এখন সবকিছু ঠিক আছে।
zuko

7
আমাদেরও androidx.test.runner.AndroidJUnitRunner থেকে androidx.test.ext.junit.runners.AndroidJUnit4 এ গ্রেড ফাইলের টেস্টইনস্রামেশন রুনার পরিবর্তন করা উচিত ? কেবল কোনও মিল নেই কিনা তা ভাবছি।
এড্রয়েড

22
@ এড্রয়েড আমদানিতে পুরানো Android JUnit4 প্যাকেজটিকে নতুন দিয়ে প্রতিস্থাপন করুন। শুধু আমদানি androidx.test.runner.AndroidJUnit4 প্রতিস্থাপন করুন; আমদানি androidx.test.ext. জুনit.runners.AndroidJUnit4 সহ;
এক্সপ্লোসিভ

27

যদি আপনি @ মার্সেলগ্যাঙ্গভিশের সমাধানটি চেষ্টা করে থাকেন এবং আপনার বিল্ড ব্যর্থ হয়ে বলে যে এটি সংস্থানটি খুঁজে পাচ্ছে না এবং আপনি আপনার প্রকল্পটি পরিষ্কার / পুনর্নির্মাণ করেছেন এবং এটি এখনও কার্যকর হয় না, এই চেষ্টা করুন: (@ ক্রিজিসটফডজিউবার সমাধানের উপর ভিত্তি করে)

আপনার গ্রেড ফাইল যেখানে আপনি নির্ভরতা পরিবর্তন করেছেন সেখানে নিশ্চিত করুন যে আপনি এটি আপনার প্রয়োজনীয় ধরণের হিসাবে যুক্ত করছেন, যেমন:

ইউআই পরীক্ষার জন্য:

androidTestImplementation 'androidx.test.ext: জুনিট: 1.1.0'

ইউনিট পরীক্ষার জন্য:

পরীক্ষার প্রয়োগ 'androidx.test.ext: জুনিট: 1.1.0'

আমার উদাহরণে আমি এটিকে উভয় হিসাবে যুক্ত করেছি এবং এখন এটি কার্যকর হয়।


13

সমাধান

  1. Build.gradle এ এই লাইন যুক্ত করুন: androidTestImplementation 'androidx.test.ext:junit:1.1.1'

  2. পরিবর্তন AndroidJUnit4করার জন্য AndroidJUnit4ClassRunnerপরীক্ষা ক্লাসে

সতর্কতা

আমি একই ত্রুটি পেয়েছি, তবে নিম্নলিখিত সমাধানটি আমার পক্ষে ব্যর্থ হয়েছে:

ফাইল -> ক্যাশে বাতিল করুন ..., এবং অকার্যকর এবং পুনরায় চালু নির্বাচন করুন


12

আমার জন্য নিম্নলিখিত পদক্ষেপগুলি কাজ করেছে:
১. এখানে পোস্ট করা Android এর সাথে গ্রন্থাগারগুলি প্রতিস্থাপন করুন । আমার চূড়ান্ত app/build.gradleদেখতে দেখতে:

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    }
    ...
}

dependencies {
    ...
    testImplementation 'junit:junit:4.12'

    // Core library
    androidTestImplementation 'androidx.test:core:1.2.0'

    // AndroidJUnitRunner and JUnit Rules
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test:rules:1.2.0'

    // Assertions
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.ext:truth:1.2.0'
    androidTestImplementation 'com.google.truth:truth:0.42'

    // Espresso dependencies
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

}

আমি তখন আমার ExampleInstrumentTest.javaক্লাসে আমদানি করা মডিউলগুলি ম্যানুয়ালি সর্বশেষ শ্রেণীর সাথে প্রতিস্থাপন করেছি :

import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4ClassRunner.class)
public class ExampleInstrumentedTest {
    ...
    @Rule
    public final ActivityTestRule<MainActivity> main = new ActivityTestRule<>(MainActivity.class, true);

    @Before
    public void init() {
        ...
    }
    @Test
    public void listCount() {
        ...
    }

    @Test
    public void useAppContext() {
        Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();

        Assert.assertEquals("in.curioustools.aad_x_testing2", appContext.getPackageName());
        System.out.println("useAppContext : Test Ran");
    }
}

আমার যে জিনিসটি বাগগুন করছে তা InstrumentationRegisteryহ'ল ক্লাসটি এখনও অবমূল্যায়িত ছিল। সুতরাং আমি ক্লাস InstrumentationRegistry.getInstrumentation().getTargetContext();থেকে ব্যবহার androidx.test.platform.app.InstrumentationRegistry


3
@RunWith(AndroidJUnit4ClassRunner.class)আমার অংশে বিষয়টি সমাধান হয়ে গেছে। অ্যান্ড্রয়েড স্টুডিওগুলি মাঝে মাঝে অবচয় কোড কেন উত্পন্ন করে তা আমি সত্যিই পাই না।
রাফসানজানি

ApllicationProvider.getApplicationContext<Context>()পরিবর্তে ব্যবহার করুনInstrumentationRegistry.getInstrumentation().getTargetContext();
মিচ

7

আমি অফিশিয়াল অ্যান্ড্রয়েড সাইটে না যাওয়া পর্যন্ত উপরে দেওয়া সমস্ত চেষ্টা করেছি এবং তারা এর androidx.test.ext.junit.runners.AndroidJUnit4পরিবর্তে আমদানি করার পরামর্শ দিয়েছে androidx.test.runner.AndroidJUnit4লিংক


2

আমার ক্ষেত্রে সাহায্যে পরিবর্তন androidTestImplementationহচ্ছে testImplementationবিল্ড.gradle এ টেস্টআইপ্লিমেশন এবং অ্যান্ড্রয়েড টেস্টআইম্পিমেশনের মধ্যে এই অ্যান্ড্রয়েড পার্থক্যটি পড়ার আগে আমি পার্থক্যটি জানতাম না


0

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

এটি আমার পক্ষে কাজ করেছিল!


0
  1. বিল্ডড্রেডল অ্যাপ মডিউলে এই লাইনগুলি অন্তর্ভুক্ত করুন।

    testImplementation 'androidx.test.ext: জুনিট: 1.1.1' androidTestImplementation 'androidx.test.ext: জুনিট: 1.1.1'

  2. পরীক্ষার শ্রেণিতে আপনার পরীক্ষার রানারকে প্রতিস্থাপন করুন

    আমদানি androidx.test.ext.junit.runners.AndroidJUnit4;

  3. যদি এই থেকে InstrumentationRegistry.getTargetContext()অবচয় ব্যবহার InstrumentationRegistryহয়androidx.test.platform.app

    InstrumentationRegistry.getInstrumentation ()। GetTargetContext ()

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