2014-01-17 57 views
8

我已经知道这个问题已经被问过,但我无法解决这个问题。 我能够编译并应用jUnit,Robolectric和Gradle进行测试。当我尝试测试活动或获取资源时,就会出现问题或错误。每当我有同样的问题:Gradle Robolectric资源NotFoundException中的测试

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)); 

这是该项目的结构:

. 
├── 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 

这是源码集de在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') 
     } 

    } 

有人可以举手解决这个问题吗?

感谢

+0

您是否使用了一些gradle插件来运行robolectric测试?你使用的是什么版本的robolectric?没有必要指定所有的源集 - 重命名资源文件夹的水库,只是使用产品口味 –

+0

是的,我使用Gradle Android测试插件0.9.1和Robolectric 2.1。我将再次申请“res”作为资源名称。我已经做过,但没有奏效。谢谢。 –

+0

你在使用android gradle插件吗? –

回答

0

最后我设法解决它移动到Robolectric V2.3快照。

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

此快照的同杰克沃顿插件本Robolectric V2.3-快照效果很好。

也许这些信息可能会帮助别人。

+0

如何将快照版本添加到您的'gradle.build' ?我似乎无法找到它 – noloman

13

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

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