Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android ApplicationTestCase utilizando un MockContext

Soy nuevo en la prueba de Android y estoy tratando de crear un ApplicationTestCase utilizando un MockContext (bueno, en realidad estoy tratando de usar un Renombrar Mock Contexto). Pero sigo recibiendo un AssertionFailedError. Aquí está mi código básico hasta ahora:

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

Rastreo de falla:

 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) 

Tenga en cuenta si utilizo la segunda llamada super () en el constructor RenamingMockContext que se comenta (por lo que no utilice la clase MockContext extendida) funciona bien.

Aquí hay una referencia UnsupportedOperationException mientras llamaba a getSharedPreferences () de la prueba de unidad que no funcionó para mí, y también leí el libro Android Application Testing Guide que da un ejemplo exactamente igual, pero cuando descargué la fuente y lo corrí directamente Dio el mismo error.

  • Prueba de unidad de Android para la vista previa de la cámara?
  • 2 Solutions collect form web for “Android ApplicationTestCase utilizando un MockContext”

    Como solución para ese ejemplo de libro, consulte la guía de desarrolladores de android de ApplicationTestCase: "Si simplemente ejecuta las pruebas tal y como están, su aplicación recibirá un contexto totalmente funcional" ( http://developer.android.com/reference /android/test/ApplicationTestCase.html ).

    Algunas líneas del método Setup deben ser comentadas para que la prueba funcione:

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

    He utilizado AndroidTestCase para simular un contexto simple.

     class ExampleTest extends AndroidTestCase public void setUp() { Context c = new DelegatedMockContext(getContext()) } class DelegatedMockContext extends MockContext { private Context mDelegatedContext; private static final String PREFIX = "test."; public DelegatedMockContext(Context context) { mDelegatedContext = context; } @Override public String getPackageName(){ return PREFIX; } @Override public SharedPreferences getSharedPreferences(String name, int mode) { return mDelegatedContext.getSharedPreferences(name, mode); } } } 

    Es sólo un pantano estándar Contexto, pero te va a ir

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.