1

私は ActivityInstrumentationTestCase2 を持っていますが、テストのコンテキストを得ることができませんでした。

package com.vsnetworks.vsnmedia.test;

import org.json.JSONObject;

import android.app.Activity;
import android.content.Context;
import android.test.ActivityInstrumentationTestCase2;

import com.vsnetworks.vsnmedia.MainActivity;
import com.vsnetworks.vsnmedia.VSWebViewClient;

public class TestMimeTypes extends ActivityInstrumentationTestCase2<MainActivity> {

Activity activity;
Context context;

public TestMimeTypes() {
    super(MainActivity.class);
}

public void setUp() throws Exception {
    super.setUp();
    activity = getActivity();
    context = activity.getApplicationContext();
}

public void test() {
    String external = context.getExternalFilesDir(null).toString();
}

エラーは次のとおりです。

 [exec] com.vsnetworks.vsnmedia.test.TestMimeTypes:INSTRUMENTATION_RESULT: shortMsg=java.lang.NullPointerException
 [exec] INSTRUMENTATION_RESULT: longMsg=java.lang.NullPointerException: Unable to start activity ComponentInfo{com.vsnetworks.vsnmedia/com.vsnetworks.vsnmedia.MainActivity}: java.lang.NullPointerException
 [exec] INSTRUMENTATION_CODE: 0

以下を実行すると、コンテキストに関連していると思います。

Context context = this.getInstrumentation().getTargetContext();

取得します(37行目はcontext.getExternal行です)

 [exec] com.vsnetworks.vsnmedia.test.TestMimeTypes:
 [exec] Error in test:
 [exec] java.lang.NullPointerException
 [exec]     at com.vsnetworks.vsnmedia.test.TestMimeTypes.test(TestMimeTypes.java:37)
 [exec]     at java.lang.reflect.Method.invokeNative(Native Method)
 [exec]     at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
 [exec]     at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
 [exec]     at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192)
 [exec]     at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
 [exec]     at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
 [exec]     at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
 [exec]     at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
 [exec] 
 [exec] Test results for InstrumentationTestRunner=..E
 [exec] Time: 0.292
 [exec] 
 [exec] FAILURES!!!
 [exec] Tests run: 2,  Failures: 0,  Errors: 1

また、いくつかの場所で getInstrumentation.waitForIdleSync() (別のスレッドで見たもの) を使用しても、同じエラーで以下のすべてを試しました。新しい MainActivity() オブジェクトを作成し、そこからコンテキストを取得しようとしましたが、getActivity() と同じ問題があります。

context = getInstrumentation().getContext();
context = getInstrumentation().getTargetContext();
context = activity.getApplicationContext();
context = activity.getBaseContext();

それで、私は世界で何を間違っていますか?

編集 1 - この問題はエミュレータでのみ発生するようです。実際のデバイスを使用してテストを実行すると、両方とも合格します。

4

2 に答える 2

1

これがあなたが探しているものだと思います:

public void testExternalFilesDir() {
    Activity activity = getActivity();
    assertNotNull(activity);
    File file = activity.getExternalFilesDir(null);
    assertNotNull("No external storage available", file);
}
于 2013-02-20T23:40:55.657 に答える
0

実際には、解決しなければならなかった問題が 2 つあります。1 つ目は、メイン プロジェクトに外部ライブラリが含まれていたことです。テストを実行すると、外部ライブラリが適切に追加されませんでした。メインを作成するときに、ライブラリを使用しようとすると、サイレントに失敗していました。それを解決するために、ここでさまざまなソリューションに従いました。

テストされたプロジェクトの libs ディレクトリに jar がある場合、「ant create test-project」を使用して作成された Android テスト プロジェクトをビルドして実行することはできません

これが私をこれに導いた:

ライブラリ プロジェクトで ant を使用した Android 単体テスト

ライブラリ プロジェクト R18 で ant を使用した Android 単体テスト

ただし、私の修正は少し異なりました。これらのプロジェクトでオーバーライドされた -compile タグを使用する代わりに、/tools/ant の build.xml コンパイルをテストの build.xml にコピーして追加しました。

            <classpath>
                <!-- steff: we changed one line here !-->
                <fileset dir="${tested.android.library.reference.1}/bin/" includes="*.jar"/>
                <fileset dir="${extensible.libs.classpath}" includes="*.jar" />
            </classpath>

2番目の回答と同じ場所にあります。

2 つ目の問題は、エミュレータが使用しようとしていた SD カードが機能していなかったことです。正確な理由はわかりませんが、新しいものを作成すると問題が解決したようです。

<sdk>/tools/mksdcard <size> <path>

<sdk>/emulator -avd <name> -sdcard <path.from.above>
于 2013-02-21T16:01:05.500 に答える