6

मैं सिर्फ ऊपर Roboelectric 3.2.2 एक नए एप्लिकेशन के साथ निर्धारित किया है और मैं अपनी पहली साधारण परीक्षण लिखा है:

@RunWith(RobolectricTestRunner.class) 
@Config(manifest="src/main/AndroidManifest.xml", 
    packageName="my.pacakge.name.debug") 
public class MainActivityTest { 

    @Test 
    public void clickButton() { 
     MainActivity mainActivity = Robolectric.setupActivity(MainActivity.class); 
     String text = ((TextView)mainActivity.findViewById(R.id.text_main)).getText().toString(); 
     assertEquals("Should equal Hello World!", "Hello World!", text); 
    } 
} 

मैं पूरी तरह तैयार पालन किया है और निर्देश

android.content.res.Resources$NotFoundException: Unable to find resource ID #0x0 in packages [android, my.package.name.debug] 

यह अपवाद परीक्षण है जहाँ मैं setupActivity() बोल रहा हूँ की पहली पंक्ति पर होता है: here और here लेकिन मैं अभी भी इस त्रुटि हर बार जब मैं परीक्षण चलाने का प्रयास हो रही है।

+0

कौन सा के संस्करण 'Robolectric' उपयोग करते हैं? मैं नवीनतम उपयोग करने और रोबोइलेक्ट्रिक ग्रेडल प्लगइन को हटाने की सलाह दूंगा, साथ ही 'कॉन्फ़िगर' –

+0

से मेनिफेस्ट और पैकेज नाम विनिर्देश को हटा दूंगा क्या आपने अपनी समस्या हल की है? यदि हां तो कैसे? –

उत्तर

0

इस प्लग जब कस्टम RobolectricTestRunner का उपयोग करने और लापता प्रणाली गुण प्रदान मेरे लिए काम करता है।

public class CustomRobolectricTestRunner extends RobolectricTestRunner { 

    public CustomRobolectricTestRunner(Class<?> testClass) throws InitializationError { 
    super(testClass); 
    String buildVariant = BuildConfig.BUILD_TYPE + (BuildConfig.FLAVOR.isEmpty()? "" : "/" + BuildConfig.FLAVOR); 
    System.setProperty("android.package", BuildConfig.APPLICATION_ID); 
    System.setProperty("android.manifest", "build/intermediates/manifests/full/" + buildVariant + "/AndroidManifest.xml"); 
    System.setProperty("android.resources", "build/intermediates/res/" + buildVariant); 
    System.setProperty("android.assets", "build/intermediates/assets/" + buildVariant); 
    } 
} 

संपादित करें: आप भी अपनी इकाई परीक्षण रन विन्यास पर एक अलग कार्यशील निर्देशिका का उपयोग करना चाहिए।@Config(manifest = "src/main/AndroidManifest.xml")

@Config(manifest = "src/main/AndroidManifest.xml") 
@RunWith(RobolectricTestRunner.class) 
public class MainActivityTest { 

    @Test 
    public void testSomething() throws Exception { 
     assertTrue(Robolectric.setupActivity(MainActivityTest .class) != null); 
    } 
} 

नोट 1 जोड़ें:: सर्वश्रेष्ठ डिफ़ॉल्ट कॉन्फ़िगरेशन बदल सकते हैं और $ MODULE_DIR $ https://code.google.com/p/android/issues/detail?id=158015#c5

1

का उपयोग यह मेरे लिए काम किया है तो आप अभी भी एक ही त्रुटि प्राप्त होती है (तब होता है जब नया बनाने परियोजना)

कारण विभिन्न कार्यशील निर्देशिका & जवाब से संबंधित है यहाँ है: https://stackoverflow.com/a/31469526/4802664

नोट 2: का उपयोग करना

एंड्रॉयड स्टूडियो 3.0 (कनारी 9)
Gradle 4.1
एंड्रॉयड Gradle प्लगइन 3.0.0-alpha9
robolectric: 3.4.2

Gradle

buildscript { 

    repositories { 
     google() 
     jcenter() 
    } 

    dependencies { 
     classpath 'com.android.tools.build:gradle:3.0.0-alpha9' 
    } 
}  

dependencies { 
    implementation fileTree(dir: 'libs', include: ['*.jar']) 
    implementation 'com.android.support.constraint:constraint-layout:1.0.2' 


    testImplementation 'junit:junit:4.12' 

    // Espresso 
    androidTestImplementation 'com.android.support.test:runner:1.0.0' 
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.0' 

    // Robolectric 
    testImplementation 'org.hamcrest:hamcrest-library:1.3' 
    testImplementation 'org.robolectric:robolectric:3.4.2' 
} 
संबंधित मुद्दे