测试中的Gradle Robolectric资源NotFoundException

Jos*_*hon 8 testing resources android gradle robolectric

我已经知道之前已经问过这个问题,但我无法解决这个问题.我能够使用jUnit,Robolectric和Gradle编译和应用测试.当我尝试测试活动或获取资源时,会出现问题或错误.每次我遇到同样的问题:

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

资源$ 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) );
Run Code Online (Sandbox Code Playgroud)

这是项目的结构:

.
??? 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
Run Code Online (Sandbox Code Playgroud)

这是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')
        }

    }
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙面对这个问题吗?

谢谢

小智 13

使用Robolectric v2.3-SNAPSHOT我也遇到了同样的问题.通过Config注释显式设置测试文件中的清单来解决它

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


Jos*_*hon 0

最后我设法解决了这个问题,迁移到 Robolectric v2.3-SNAPSHOT。

您可以在这里找到此快照 oss.sonatype.org/index.html#nexus-search;quick~org.robolectric

同样的 Jake Wharton 插件与 Robolectric v2.3-SNAPSHOT 配合得很好。

也许这些信息可能对其他人有帮助。