android - Robolectric: संसाधन $ NotFoundException: एंड्रॉइड ग्रैडल प्लगइन 3 के साथ स्ट्रिंग संसाधन आईडी




unit-testing testing (4)

आप इस मामले में @Config(manifest = "<projectFolder>/src/main/AndroidManifest.xml") को भी आजमा सकते हैं, जिसमें आप संसाधनों को शामिल नहीं कर सकते क्योंकि कुछ प्रोजेक्ट परीक्षण उसमें विफल हो जाएंगे।

Android Studio 3.0 Beta2
classpath 'com.android.tools.build:gradle:3.0.0-beta3'
testCompile 'org.robolectric:robolectric:3.4.2'

टेस्ट क्लास जिसका मैं उपयोग कर रहा हूं वह चलाने में विफल रहता है:

@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.LOLLIPOP)
@RunWith(RobolectricTestRunner.class)
public class RecipeAdapterTest {
    private MainActivity activity;

    @Before
    public void setup() {

    activity = Robolectric.setupActivity(MainActivity.class);

    /* Also tried this same Error
     activity = Robolectric.buildActivity(MainActivity)
                .create()
                .resume()
                .get();
    */
    }

    @Test
    public void testActivityShouldNotBeNull() {
        assertThat(activity, is(notNullValue()));
    }
}

यह त्रुटि का ढेर निशान है:

android.content.res.Resources$NotFoundException: String resource ID #0x7f0c0020

    at android.content.res.Resources.getText(Resources.java:274)
    at android.content.res.Resources.getString(Resources.java:360)
    at android.content.Context.getString(Context.java:376)
    at org.robolectric.shadows.ShadowActivity.getActivityTitle(ShadowActivity.java:100)
    at org.robolectric.shadows.ShadowActivity.callAttach(ShadowActivity.java:110)
    at org.robolectric.android.controller.ActivityController.attach(ActivityController.java:56)
    at org.robolectric.android.controller.ActivityController.of(ActivityController.java:25)
    at org.robolectric.Robolectric.buildActivity(Robolectric.java:98)
    at org.robolectric.Robolectric.buildActivity(Robolectric.java:94)
    at org.robolectric.Robolectric.setupActivity(Robolectric.java:102)
    at me.androidbox.busbybaking.adapters.RecipeAdapterTest.setup(RecipeAdapterTest.java:63)

Edit Configurations मैंने Working Directory को $MODULE_DIR$ पर सेट कर दिया है

किसी भी सुझाव के लिए बहुत धन्यवाद।


मेरे मामले में निम्नलिखित ने मेरी समस्या हल की: "समस्या एंड्रॉइड स्टूडियो से संबंधित है। 'रन' पर जाएं -> 'कॉन्फ़िगरेशन संपादित करें ...' और 'वर्किंग डायरेक्टरी' मान को $ MODULE_DIR $ में बदलें

अपने परीक्षण चलाएं।

'एंड्रॉइड स्टूडियो के साथ बिल्डिंग' के तहत यहां अधिक जानकारी। "

संदर्भ: https://github.com/robolectric/robolectric/issues/2653


Robolectric दस्तावेज बताता है कि निम्न कॉन्फ़िगरेशन एंड्रॉइड स्टूडियो 3.x के साथ उपयोग किया जाना चाहिए:

android {
  testOptions {
    unitTests.includeAndroidResources true
  }
}

जैसा कि Google टीम (संभवत: जेवियर डक्रोहेट ) के एक इंजीनियर द्वारा उल्लेख किया गया है, रोबॉलेक्ट्रिक में एएपीटी 2 के साथ समस्याएं हैं:

Robolectric एप 2 के साथ संगत नहीं है।

यहां दो विकल्प हैं।

पहला विकल्प - एंड्रॉइड स्टूडियो 3.0+ के लिए रोबोलेक्ट्रिक दिशानिर्देशों का पालन करें

अपने build.gradle में निम्नलिखित जोड़ें:

android {
  testOptions {
    unitTests {
      includeAndroidResources = true
    }
  }
}

Robolectric परीक्षण धावक के साथ अपने परीक्षण की व्याख्या करें:

@RunWith(RobolectricTestRunner.class)
public class SandwichTest {
}

दूसरा विकल्प: gradle.properties फ़ाइल में निम्न पंक्ति जोड़कर AAPT2 अक्षम करें:

android.enableAapt2=false




robolectric