简体   繁体   English

测试中的Gradle Robolectric资源NotFoundException

[英]Gradle Robolectric Resources NotFoundException in Testing

I've already knew that this issue has been asked before but I can't solve this problem. 我已经知道之前已经问过这个问题,但我无法解决这个问题。 I am able to compile and apply test with jUnit, Robolectric and Gradle. 我能够使用jUnit,Robolectric和Gradle编译和应用测试。 The issue or error comes when I try to test an Activity or get a resource. 当我尝试测试活动或获取资源时,会出现问题或错误。 Every time I've got the same issue: 每次我遇到同样的问题:

android.content.res.Resources$NotFoundException: unknown resource android.content.res.Resources $ NotFoundException:未知资源

Resources$NotFoundException: no such theme 资源$ NotFoundException:没有这样的主题

 PageActivity startPageActivity   =   Robolectric.buildActivity(PageActivity.class).create().get();

 Context context =  Robolectric.getShadowApplication().getApplicationContext();
 ShadowContext shadowContext = shadowOf(context);
 assertNotNull( " No App name String " ,shadowContext.getString(R.string.app_name) );

And this is the project's structure: 这是项目的结构:

.
├── build.gradle
├── settings.gradle
└── mainproject
    ├── build
    │   ├── classes
    │   │   └── debug
    ├── build.gradle
    └── src
       └── main
       │    ├── AndroidManifest.xml
       │    └── java
       │         └── com...
       │    └── resources
       └── envDev
       │    └── java
       │         └── com...
       │    └── resources
       └── envQa
       │    └── java
       │          └── com...
       │    └── resources
       └── envLive
       │    └── java
       │         └── com...
       │    └── resources
       └── test
       │    └── src
       │         └── java
       │               └── com...
       │         └── rescources
       └── testEnvDev
       │    └── src
       │         └── java
       │               └── com...
       │         └── rescources
       └── testEnvQa
       │    └── src
       │         └── java
       │               └── com...
       │         └── rescources
       └── testEnvLive
            └── src
                 └── java
                       └── com...
                 └── rescources

This is the source set defined in gradle: 这是gradle中定义的源集:

sourceSets {  
        main {
            java.srcDir  file('src/main/java')
            manifest.srcFile file('src/main/AndroidManifest.xml')
            res.srcDir file('src/main/resources')
        }
        envDev {
            java.srcDir file('src/envDev/java')
            manifest.srcFile 'src/envDev/AndroidManifest.xml'
            res.srcDir file('src/envDev/resources')
        }

        envQa {
            java.srcDir file('src/envQa/java')
            manifest.srcFile 'src/envQa/AndroidManifest.xml'
            res.srcDir file('src/envQa/resources')
        }

        envLive {
            java.srcDir file('src/envLive/java')
            manifest.srcFile 'src/envLive/AndroidManifest.xml'
            res.srcDir file('src/envLive/resources')
        }

        instrumentTest {
            java.srcDir  file('src/test/java')
            res.srcDir  file('src/test/resources')
        }
        instrumentTestEnvDev {
            java.srcDir file('src/testEnvDev/java')
            res.srcDir file('src/testEnvDev/resources')
        }
        instrumentTestEnvQa {
            java.srcDir file('src/testEnvQa/java')
            res.srcDir file('src/testEnvQa/resources')
        }
        instrumentTestEnvLive {
            java.srcDir file('src/testEnvLive/java')
            res.srcDir file('src/testEnvLive/resources')
        }

    }

Could someone give a hand to face this problem? 有人可以帮忙面对这个问题吗?

Thanks 谢谢

I had this same problem even with Robolectric v2.3-SNAPSHOT. 使用Robolectric v2.3-SNAPSHOT我也遇到了同样的问题。 Solved it by explicitly setting the manifest in the test file via the Config annotation, like 通过Config注释显式设置测试文件中的清单来解决它

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

At the end I managed to solve it moving to Robolectric v2.3-SNAPSHOT. 最后我设法解决了它转向Robolectric v2.3-SNAPSHOT。

You can find this SNAPSHOT here oss.sonatype.org/index.html#nexus-search;quick~org.robolectric 你可以在这里找到这个SNAPSHOT oss.sonatype.org/index.html#nexus-search;quick ~org.robolectric

The same Jake Wharton plugin works well with this Robolectric v2.3-SNAPSHOT. 同样的Jake Wharton插件适用于这款Robolectric v2.3-SNAPSHOT。

Perhaps this information might help someone else. 也许这些信息可能对其他人有帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM