AndroidJUnit4.class को हटा दिया गया है: Androidx.test.ext.junit.runners.AndroidJUnit4 का उपयोग कैसे करें?


254

अपने इंस्ट्रूमेंटेशन परीक्षणों के लिए मैं उपयोग कर रहा था

@RunWith(AndroidJUnit4.class)

से

import androidx.test.runner.AndroidJUnit4;

मेरे परीक्षण मामलों को स्थापित करने के लिए। अब इस लाइन को उपयोग करने के संकेत के साथ पदावनत के रूप में चिह्नित किया जाता AndroidJUnit4है

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

हालाँकि अगर मैं AndroidJUnit4नामित पैकेज से आयात करने की कोशिश करता हूं तो मुझे त्रुटि मिलती है, जिसे extहल नहीं किया जा सकता है।

क्या आपके पास एक विचार है, इस मुद्दे को हल करने के लिए ग्रेडेल में कौन सा पैकेज शामिल होना चाहिए?



4
मुझे लगता है कि आपका स्रोत आज्ञाकारी है, वे androidx का उल्लेख नहीं करते हैं।
मार्सेल गैंगविस्क

1
एंड्रॉइड पर यूनिट परीक्षण बग और अवक्षेपण का एक पूर्ण गड़बड़ है। केवल एक चीज जो मेरे लिए काम करती है, वह एक नया स्क्रैच प्रोजेक्ट बना रही है, उस प्रोजेक्ट से संबंधित फाइलों को खान में कॉपी करना, डिबग मोड पर स्विच करना और पूर्ण कैश अमान्य करना। इसके अलावा AndroidJUnit4 परीक्षणों के लिए पैकेज नाम को लाइब्रेरी पैकेज नाम से मेल खाना है।
रूपर्ट रॉन्स्ले

जवाबों:


375

के अनुसार AndroidJUnit4 के लिए दस्तावेज़ ,

  1. ग्रेड फ़ाइल में निम्न पंक्ति होनी चाहिए: androidTestImplementation 'androidx.test.ext:junit:1.1.1'

  2. करने के लिए परीक्षण वर्ग बदलें AndroidJUnit4ClassRunnerसेAndroidJUnit4

यदि यह अभी भी काम नहीं करता है, तो सुनिश्चित करें कि आप अपनी परियोजना को साफ और / या पुनर्निर्माण करते हैं। इसके अलावा, आप वर्तमान संस्करण को सीधे Google के मैवेन रिपॉजिटरी में देख सकते हैं


20
मेरी श्रेणी में यह है और फिर भी समस्या का समाधान नहीं किया जा सकता है।
ज़ूको

@ ज़ुको क्लीन और / या आपकी परियोजना का पुनर्निर्माण, यह होना चाहिए। यदि अभी भी नहीं और आप मॉड्यूल का उपयोग कर रहे हैं, तो जांच लें कि आपकी निर्भरता पदानुक्रम सेटअप है जैसा कि आप उम्मीद करते हैं; आपको शीर्ष स्तर के मॉड्यूल में भी इन्हें जोड़ने की आवश्यकता हो सकती है - चूंकि परीक्षण पुस्तकालयों को अपस्ट्रीम मॉड्यूल द्वारा उपयोग के लिए साझा मॉड्यूल में संकलित नहीं किया जाता है।
जॉन एडम्स

@JonAdams मेरी निर्भरता का पेड़ पुराने पुस्तकालयों के संदर्भ में किसी कारण से पकड़े रहा, हालांकि मुझे लगा कि मैंने उन्हें हटा दिया है। इसलिए विभिन्न चीजों की कोशिश करने के बाद मैंने परियोजना को एक नए सिरे से स्थानांतरित कर दिया और अब सब कुछ ठीक है।
ज़ुको

7
क्या हमें androidx.test.runner.AndroidJUnitRunner से androidx.test.ext.junit.runners.AndroidJUnn4 में टेस्टइनस्ट्रीटेशन रनर फाइल को भी बदलना चाहिए ? अगर कोई बेमेल है तो बस सोच रहा था।
एक Droid

22
@A Droid नए के साथ आयात में पुराने AndroidJUnit4 पैकेज को बदलें। बस इंपोर्ट बदलें androidx.test.runner.AndroidJUnit4; आयात के साथ androidx.test.ext.junit.runners.AndroidJUnit4;
Xplosive

27

यदि आपने @ MarcelGangwisch के समाधान की कोशिश की है और आपका निर्माण यह कहते हुए विफल हो जाता है कि यह संसाधन नहीं मिल रहा है और आपने अपनी परियोजना को साफ / फिर से बनाया है और यह अभी भी काम नहीं करता है, तो यह कोशिश करें: (@ KrzysztofDziuba समाधान पर आधारित)

अपनी श्रेणी फ़ाइल में, जहां आपने निर्भरता को बदल दिया है, सुनिश्चित करें कि आप इसे उस प्रकार से जोड़ रहे हैं जिसकी आपको आवश्यकता है, अर्थात:

UI परीक्षणों के लिए:

AndroidTestIm कार्यान्वयन 'androidx.test.ext: junit: 1.1.0'

यूनिट परीक्षणों के लिए:

testImplementation 'androidx.test.ext: junit: 1.1.0'

मेरे उदाहरण में मैंने इसे दोनों के रूप में जोड़ा और अब यह काम करता है।


13

उपाय

  1. इस लाइन को build.gradle में जोड़ें: androidTestImplementation 'androidx.test.ext:junit:1.1.1'

  2. बदले AndroidJUnit4के लिए AndroidJUnit4ClassRunnerपरीक्षण वर्ग में

चेतावनी

मुझे वही त्रुटि मिली, लेकिन निम्न समाधान मेरे लिए विफल रहा:

फ़ाइल -> अमान्य कैश ..., और अमान्य और पुनरारंभ का चयन करें


12

मेरे लिए निम्न चरणों ने काम किया:
1. Androidx पुस्तकालयों को यहां पोस्ट किए गए के साथ बदलें । मेरा फाइनल 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संपर्क



0

यदि आपने उन AnroidX परीक्षण पुस्तकालयों को आयात किया है, तो परियोजना को सिंक और फिर से बनाया गया है, लेकिन आयातित पैकेज अभी भी हल नहीं हुए हैं। बस याद रखें कि आपने अपनी परियोजना को AndroidX में कैसे अपग्रेड किया है, Android Studio को बंद करें और .ideaफ़ोल्डर निकालें और अपनी परियोजना को फिर से खोलें ...

यह मेरे लिए काम किया!


0
  1. इन लाइनों को build.gradle ऐप मॉड्यूल में शामिल करें।

    testImplementation 'androidx.test.ext: junit: 1.1.1' androidTestImplementation 'androidx.test.ext: junit: 1.1.1'

  2. टेस्ट क्लास में अपने टेस्ट रनर को बदलें

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

  3. अगर इस तरह से InstrumentationRegistry.getTargetContext()उपयोग InstrumentationRegistryसे वंचित किया जाता हैandroidx.test.platform.app

    InstrumentationRegistry.getInstrumentation ()। GetTargetContext ()

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