【问题标题】:Gradle Robolectric Resources NotFoundException in Testing测试中的 Gradle Robolectric 资源 NotFoundException
【发布时间】:2014-01-17 12:58:15
【问题描述】:

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

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

Resources$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

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

    }

有人可以帮忙解决这个问题吗?

谢谢

【问题讨论】:

  • 您是否在使用一些 gradle 插件来运行 robolectric 测试?你用的是什么版本的机器人?无需指定所有源集 - 将资源文件夹重命名为 res 并使用产品风味
  • 是的,我正在使用 Gradle Android 测试插件 0.9.1 和 Robolectric 2.1。我将再次申请“res”作为资源名称。我之前已经做过,但是没有用。谢谢。
  • 你在使用android gradle插件吗?
  • 是的,我正在使用 Jake Wharton 之一:link@EugenMrtynov

标签: android testing resources gradle robolectric


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    同样的 Jake Wharton 插件适用于这个 Robolectric v2.3-SNAPSHOT。

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

    【讨论】:

    • 如何将快照版本添加到您的gradle.build?我的好像没找到
    猜你喜欢
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    相关资源
    最近更新 更多