Android ApplicationTestCase à l'aide d'un MockContext

Je suis nouveau sur Android tests et je suis en train de créer un ApplicationTestCase à l'aide d'un MockContext (bon en fait je suis en train d'utiliser un changement de nom se Moquer de Contexte). Mais je reçois un AssertionFailedError. Voici mon code pour l'instant:

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

}

RenamingMockContext.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);
        }

    }

}

Échec De Trace:

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)

Remarque si j'utilise le deuxième appel super() dans la RenamingMockContext constructeur qui est en commentaire (donc ne l'utilisez pas l'étendue MockContext classe), il fonctionne très bien.

Ici est une référence UnsupportedOperationException tout en appelant getSharedPreferences() à partir de l'unité de test qui n'a pas fonctionné pour moi, et j'ai aussi lu le livre d'une Application Android Test Guide qui donne un exemple exactement comme cela, mais lorsque j'ai téléchargé la source et il a couru directement, il a donné le même message d'erreur.

J'ai résolu ce problème en étendant ContextWrapper. Voir ma réponse ici - stackoverflow.com/a/19710382/201113

OriginalL'auteur odiggity | 2013-01-07