9

Robolectric を使用するように Android アプリのテスト プロジェクトを構成しました。Eclipse Quick Startに従いました。最初の単純なテストを実行すると、例外が発生します。

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)
    [...]

テストは次のとおりです。

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

    }
}

./resAndroidフォルダが見つからないようです。${workspace_loc:teldir-android}ガイドが言うように、JUnit構成を指摘しました。そして、これにより、EclipseはAndroidManifest.xml他のエラーを回避して、を見つけるようになります。

この例外を回避しよう./resとして、Android アプリのソース フォルダーとしてフォルダーを追加し、すべてをクリーンアップして再起動しましたが、同じ例外が発生しました。

私は何を間違っていますか?

4

6 に答える 6

6

テスト実行構成に環境変数を追加する必要がありました。

ANDROID_HOME=C:/path/to/android-sdks
于 2012-10-21T19:11:07.020 に答える
4

Robolectricを使用してEclipseプロジェクトを最初にセットアップしたときに、まったく同じ問題(リソースのロード時にRuntimeException)が発生しましたが、現在は機能しています。

私は2つのことを理解しました:

  • WARNING: Unable to find path to Android SDK(1.0-RC1より前のバージョンではメッセージが表示されない可能性があります)を受け取った場合はResourceLoader、SDKルートを見つけることができませんでした。メソッドの1つは、ANDROID_HOMEAndroidSDKが存在する場所を指す必要がある環境変数を探します。
  • 最後に、menu.xmlが特定の方法でフォーマットされていない場合に例外を引き起こすバグがあります。

MavenまたはAntなしでRobolectricを使用することは可能ですが、さらにいくつかのバグがある可能性があります。このビデオは、正しいプロジェクト設定を示しています。動作しない場合は、Githubから最新バージョンを入手し(EclipseにMavenプロジェクトとしてインポートし、github.com / mosabua / maven-android-sdk-deployerが必要になる場合があります)、デバッグを開始します。

于 2011-07-12T18:43:00.763 に答える
0

このリンクから Jar ファイルを取得できます。ダウンロードするだけです。私のプロジェクトで使用したプロジェクトにJARを追加します。ご不明な点はお問い合わせください

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

于 2015-03-11T17:57:19.903 に答える
0

Windows 8 の新規インストール後にこの問題が発生しました。おそらく、Robolectric が SDK を見つけることができません。それを正しい場所に向けるためです。local.propertiesAndroid プロジェクトでファイルを生成できます。これは、プロジェクトのルート フォルダーに移動してコマンドを発行することにより、コマンド ラインで実行できます。

android update project –p c:\project\root\folder

を開いて、 が予想されるパスを指していることlocal.propertiesを確認します。sdk.dir

また、Android API レベル 8 をダウンロードしたことを確認してください。Robolectric は/path/to/your/sdk/platforms/android-8ディレクトリ内のフォルダーを探します。

于 2013-05-09T10:14:55.190 に答える
0

明らかに間違っています..Eclipseワークスペースがまだリンクされたソースの個々のファイルを適切に認識しないため、Eclipseからrobolectricテストを起動できないため、アリの方法をセットアップする必要がありました..私のアルファの例を参照してください:

https://github.com/shareme/Wabash

ちなみに、Pivo​​tal Labs の指示から得たのと同じエラー..

于 2011-03-17T14:25:13.023 に答える