Robolectric says “AndroidManifest.xml not found”

*爱你&永不变心* 提交于 2019-11-30 03:07:31

I'm assuming you're trying to run the tests with JUnit. You can try two different things:

  1. Create a Custom TestRunner class, as shown here. Check the CustomTestRunner section, where you basically create a TestRunner that actually knows the right manifest to use. Specify your tests for them to run with your test runner, with the @Config annotation.
  2. (My preferred choice) Go the your JUnit configuration, Run > Edit Configurations. Notice the 'Working Directory' textbox. Append /app (for OSX and Linux) or \app (Windows), to the path written in the textbox. Try running again and it should work.

Same problem on Android Studio. I've solved this problem to edit the configuration of Unit4. you can follow these things.

On Android Studio.

  1. Edit Configurations
  2. In Junit, you have to change the working directory to $MODULE_DIR$.

The important thing is $MODULE_DIR$.

you can reference the following screenshot. thanks.

I have faced same errors, We used several flavors and buildtypes So, there are steps to make it working:

  1. Android studio tests run configuration

You have to set working directory to $MODULE_DIR$ in Windows too. http://robolectric.org/getting-started/ should say that.

  1. Unit test should be annotated like this:

    @RunWith(RobolectricTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21, manifest = "src/main/AndroidManifest.xml", packageName = "com.example.yourproject") public class SomeFragmentTest {

In case you are still getting this error with Android Studio 3.0, please be sure that your gradle configuration has these parameters:

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

Note that intellij 16 EAP has a bug around this $MODULE_DIR$ variable (it's pointing to the wrong place), causing the tests to fail with this exception. See https://youtrack.jetbrains.com/issue/IDEA-149802#tab=History. Should get fixed mid Jan 2016.

You Can refer the same issue here:https://github.com/robolectric/robolectric/issues/1648

You should mention this in your test code:

@Config(manifest = "src/main/AndroidManifest.xml", emulateSdk = 18)

This tells the robolectric where your manifest file is. This should work unless you change your directory values.

also try to use the template available on the internet.Everything is setup in there.You don't need to change your directory values. You can get it from here:https://github.com/robolectric/deckard-gradle

Edit: The way i see is the exception occurs at "build/intermediates/bundles/debug/AndroidManifest.xml " but you are saying the file is at "app/build/intermediates/manifests/full/debug/AndroidManifest.xml",I guess these two are different locations. Please make sure you have the xml file at build/intermediates/bundles/debug/AndroidManifest.xml "

That's correct @Christine. I am also facing the exact problem. And the thing is build process is not creating bundles folder at all under intermediates. And custom robolectric runner also didn't work. Here is the custom runner I used. I haven't still figured out the solution but it seems that the problem may be related to build tool version that needs to used.

[Update] Changing working directory in my unit test run configuration to point to the module root directory which is being tested worked for me.[Update]

I had this error after I updated AndroidStudio to 2.3.3 and my gradle plugin was updated too. It was solved by setting working directory to $MODULE_DIR$ and also updating robolectric dependency from testCompile 'org.robolectric:robolectric:3.0' to testCompile 'org.robolectric:robolectric:3.4.2'.

Note that setting working directory while robolectric version is old won't resolve it.

 Hi All Iam new to RoboElectric was facing lot of struggle to run my first test 
please find the below steps which resolves all the issues.
Step 1: use the version in dependencies     
    testImplementation"org.robolectric:robolectric:4.0" in app.gradle    
step 2: 
in app.gradle inside android use below
testOptions {    
        unitTests {    
            includeAndroidResources = true      
        }    
    }    

step 3:in gradle.properties paste the below
enableUnitTestBinaryResources=true

It works !!!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!