7

私は Android テストが初めてで、MockContext を使用して ApplicationTestCase を作成しようとしています (実際には、名前変更モック コンテキストを使用しようとしています)。しかし、AssertionFailedError が発生し続けます。これまでの私の非常に基本的なコードは次のとおりです。

AppTests.java

package com.myProject.test;

import android.test.ApplicationTestCase;

public class AppTests extends ApplicationTestCase<MyApplication> {
    public AppTests() {
        super(MyApplication.class);
    }

    @Override
    protected void setUp() throws Exception {
        final RenamingMockContext mockContext = new RenamingMockContext(getContext());
        setContext(mockContext);
        createApplication();
    }

}

MyApplication.java

package com.myProject.test;

import android.app.Application;

public class MyApplication extends Application {

    public MyApplication() {
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

}

名前の変更MockContext.java

package com.myProject.test;

import android.content.Context;
import android.content.SharedPreferences;
import android.test.RenamingDelegatingContext;
import android.test.mock.MockContext;

public class RenamingMockContext extends RenamingDelegatingContext {

    private static final String PREFIX = "test.";

    public RenamingMockContext(Context context) {
        super (new DelegatedMockContext(context), PREFIX);
        //super(context, PREFIX);
    }

    private static class DelegatedMockContext extends MockContext {
        private Context mDelegatedContext;
        public DelegatedMockContext(Context context) {
            mDelegatedContext = context;
        }

        @Override
        public String getPackageName() {
            return mDelegatedContext.getPackageName();
        }

        @Override
        public SharedPreferences getSharedPreferences(
          String name, int mode) {
          return mDelegatedContext.getSharedPreferences(
            PREFIX + name, mode);
        }

    }

}

失敗のトレース:

junit.framework.AssertionFailedError
at android.test.ApplicationTestCase.setupApplication(ApplicationTestCase.java:102)
at android.test.ApplicationTestCase.createApplication(ApplicationTestCase.java:118)
at com.myApplication.test.AppTests.setUp(AppTests.java:14)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1710)

コメントアウトされた RenamingMockContext コンストラクターで 2 番目の super() 呼び出しを使用すると (したがって、拡張された MockContext クラスを使用しないでください)、正常に動作することに注意してください。

これは、単体テストから getSharedPreferences() を呼び出す際の UnsupportedOperationExceptionの参照ですが、これはうまくいきませんでした。また、Android Application Testing Guide を読んで、このような例を示していますが、ソースをダウンロードして直接実行したとき同じエラーが発生しました。

4

2 に答える 2

4

その本のサンプルの回避策として、ApplicationTestCase の Android 開発者ガイドを確認してください: /android/test/ApplicationTestCase.html )。

テストを機能させるには、Setup メソッドの数行をコメント化する必要があります。

protected void setUp() throws Exception
    {
        super.setUp();
        // final RenamingMockContext mockContext = new RenamingMockContext(
        // getContext());
        // setContext(mockContext);

        createApplication();
        mApplication = getApplication();
    }
于 2013-10-26T13:03:00.393 に答える