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.
OriginalL'auteur odiggity | 2013-01-07
Vous devez vous connecter pour publier un commentaire.
Comme une solution de contournement pour le livre de l'échantillon, vérifier l'android developer guide de ApplicationTestCase: "Si le simple fait de l'exécution de vos tests, votre Demande sera injecté avec un Contexte fonctionnel" (http://developer.android.com/reference/android/test/ApplicationTestCase.html).
Les quelques lignes de la méthode de Configuration doit être commentée à obtenir le test de travail:
OriginalL'auteur cfc
J'ai utilisé AndroidTestCase de se moquer d'un simple contexte.
C'est juste une tourbière standard Contexte, mais vous va
OriginalL'auteur MikeB