Robolectric + Eclipse找不到资源?

我刚刚为我的Android应用程序configuration了一个testing项目来使用Robolectric。 我遵循Eclipse快速入门 。 执行我简单的第一个testing就引发了一个exception。

java.lang.RuntimeException: java.lang.NullPointerException at com.xtremelabs.robolectric.res.ResourceLoader.init(ResourceLoader.java:93) at com.xtremelabs.robolectric.res.ResourceLoader.getStringValue(ResourceLoader.java:271) at com.xtremelabs.robolectric.shadows.ShadowResources.getString(ShadowResources.java:56) at android.content.res.Resources.getString(Resources.java) at org.xxx.mobile.android.teldir.app.TelephoneDirectoryTest.searchButtonLabelShouldBeGo(TelephoneDirectoryTest.java:22) [...] Caused by: java.lang.NullPointerException at com.xtremelabs.robolectric.res.StringResourceLoader.getValue(StringResourceLoader.java:17) at com.xtremelabs.robolectric.res.StringArrayResourceLoader.processNode(StringArrayResourceLoader.java:39) at com.xtremelabs.robolectric.res.XpathResourceXmlLoader.processResourceXml(XpathResourceXmlLoader.java:27) at com.xtremelabs.robolectric.res.DocumentLoader.loadResourceXmlFile(DocumentLoader.java:58) at com.xtremelabs.robolectric.res.DocumentLoader.loadResourceXmlDir(DocumentLoader.java:52) at com.xtremelabs.robolectric.res.DocumentLoader.loadResourceXmlDir(DocumentLoader.java:39) at com.xtremelabs.robolectric.res.ResourceLoader.loadValueResourcesFromDir(ResourceLoader.java:142) at com.xtremelabs.robolectric.res.ResourceLoader.loadValueResourcesFromDirs(ResourceLoader.java:136) at com.xtremelabs.robolectric.res.ResourceLoader.loadValueResources(ResourceLoader.java:109) at com.xtremelabs.robolectric.res.ResourceLoader.init(ResourceLoader.java:85) at com.xtremelabs.robolectric.res.ResourceLoader.getStringValue(ResourceLoader.java:271) at com.xtremelabs.robolectric.shadows.ShadowResources.getString(ShadowResources.java:56) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.xtremelabs.robolectric.bytecode.ShadowWrangler.methodInvoked(ShadowWrangler.java:87) at com.xtremelabs.robolectric.bytecode.RobolectricInternals.methodInvoked(RobolectricInternals.java:110) at android.content.res.Resources.getString(Resources.java) [...] 

testing如下。

 import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import com.xtremelabs.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class TelephoneDirectoryTest { private TelephoneDirectory activity; @Before public void setUp() { activity = new TelephoneDirectory(); } @Test public void searchButtonLabelShouldBeGo() throws Exception { String goLabel = activity.getResources().getString(R.string.search); assertEquals("Go", goLabel); } } 

看来它无法findAndroid ./res文件夹。 我指出JUnit的configuration为${workspace_loc:teldir-android} 。 这使Eclipsefind了AndroidManifest.xml ,避免了其他错误,恕我直言。

试图避免这个exception,我也添加./res文件夹作为我的Android应用程序的源文件夹,清理并重新启动所有,但提出了相同的exception。

我究竟做错了什么?

Solutions Collecting From Web of "Robolectric + Eclipse找不到资源?"

我不得不添加一个环境variables到我的testing运行configuration:

 ANDROID_HOME=C:/path/to/android-sdks 

在第一次使用Robolectric设置我的Eclipse项目时,我遇到了完全相同的问题(加载资源时出现RuntimeException),但现在可以使用了。

我想到了两件事情:

  • 如果收到WARNING: Unable to find path to Android SDK (消息可能不会显示在低于1.0-RC1的版本中),则ResourceLoader无法find您的SDK根目录。 其中一种方法查找ANDROID_HOME环境variables,该variables应该指向您的Android SDK所在的位置。
  • 最后,如果你的menu.xml没有以某种方式格式化的话,会有一个错误导致exception。

使用没有Maven或Ant的Robolectric是可能的,但是可能会有更多的bug。 该video显示正确的项目设置。 如果不行,从Github获取最新版本(在Eclipse中导入为Maven项目,您可能需要github.com/mosabua/maven-android-sdk-deployer )并开始debugging!

如果ResourceNotFound仅对使用<array>...</array>标记定义的string数组发生,请将其replace为<string-array>...</string-array>

使用robolectric 2.0

请参阅: https : //groups.google.com/forum/#!topic/robolectric/gQoY0bCguYs

docs: http : //developer.android.com/guide/topics/resources/string-resource.html#StringArray

它显然是错误的..我必须设置一个ant的方式来做事情,因为你不能从eclipse启动robolectrictesting,因为Eclipse工作区仍然无法正确识别链接源个人文件..看我的alpha示例:

https://github.com/shareme/Wabash

同样的错误,我得到的方式..从Pivotal实验室方向..

刚做完Windows 8的全新安装后就遇到了这个问题。很可能Robolectric找不到SDK。 为了把它指向正确的地方。 你可以在你的Android项目中生成一个local.properties文件。 这可以在命令行中通过转到项目的根文件夹并发出以下命令来完成:

 android update project –pc:\project\root\folder 

打开local.properties来validationsdk.dir指向预期的path。

另外,请确保您已经下载了Android API级别8. Robolectric在/path/to/your/sdk/platforms/android-8目录中查找文件夹。

你可以在这个链接中获得Jar文件,只需下载它。 在我的项目中使用的项目中添加JAR。 任何怀疑问我

http://www.java2s.com/Code/JarDownload/robolectric/robolectric-1.2-8.jar.zip