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


NPE al llamar a MockitoAnnotations.initMocks () en AndroidTestCase

Tratando de usar mockito en mi AndroidTestCase. He añadido las dependencias a la build.gradle:

final DEXMAKER_VERSION = '1.2' dependencies { // ... androidTestCompile "com.google.dexmaker:dexmaker:${DEXMAKER_VERSION}" androidTestCompile "com.google.dexmaker:dexmaker-mockito:${DEXMAKER_VERSION}" androidTestCompile 'org.mockito:mockito-core:1.10.19' } 

El TestCase con la inicialización de mockito:

  • Discrete seekbar en la aplicación de Android?
  • Ocultar el teclado EditTexts en Fragmentos
  • Respuesta inesperada de facturación de Android en la aplicación
  • Error durante la creación de un archivo APK en Android Studio 2.1.1
  • ¿Cómo concatenar cadenas múltiples en android XML?
  • ¿Por qué el tamaño androide de apk difiere cuando se construye desde windows y mac
  •  public class UsersListPresenterTest extends AndroidTestCase { public void setUp() throws Exception { MockitoAnnotations.initMocks(this); } public void testInitialize() throws Exception { } } 

    Pero tan pronto como añadir cualquier atributo a la clase, incluso antes de añadir cualquier anotación de la prueba de inicio de accidente:

     public class UsersListPresenterTest extends AndroidTestCase { String mockString; public void setUp() throws Exception { MockitoAnnotations.initMocks(this); } public void testInitialize() throws Exception { } } 

    Con el siguiente stacktrace

     java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference at com.google.dexmaker.mockito.DexmakerMockMaker.getInvocationHandlerAdapter(DexmakerMockMaker.java:80) at com.google.dexmaker.mockito.DexmakerMockMaker.getHandler(DexmakerMockMaker.java:75) at org.mockito.internal.util.MockUtil.isMockitoMock(MockUtil.java:74) at org.mockito.internal.util.MockUtil.isMock(MockUtil.java:66) at org.mockito.internal.configuration.injection.scanner.MockScanner.isMockOrSpy(MockScanner.java:86) at org.mockito.internal.configuration.injection.scanner.MockScanner.preparedMock(MockScanner.java:72) at org.mockito.internal.configuration.injection.scanner.MockScanner.scan(MockScanner.java:61) at org.mockito.internal.configuration.injection.scanner.MockScanner.addPreparedMocks(MockScanner.java:47) at org.mockito.internal.configuration.InjectingAnnotationEngine.injectMocks(InjectingAnnotationEngine.java:96) at org.mockito.internal.configuration.InjectingAnnotationEngine.processInjectMocks(InjectingAnnotationEngine.java:62) at org.mockito.internal.configuration.InjectingAnnotationEngine.process(InjectingAnnotationEngine.java:56) at org.mockito.MockitoAnnotations.initMocks(MockitoAnnotations.java:108) at com.myproject.presentation.UsersListPresenterTest.setUp(UsersListPresenterTest.java:28) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1853) 

    ¿Qué estoy haciendo mal?

  • La actividad de Android se recrea
  • Botón único de AlertDialog de Android
  • ¿Cómo controlar el ancho y la altura del cuadro de diálogo de alertas predeterminado en Android?
  • Agregar el comportamiento de vista de desplazamiento de la barra de aplicaciones a varias vistas en CoordinatorLayout
  • El lanzamiento de un cuadro de diálogo "No se puede agregar ventana - símbolo nulo no es para una aplicación" con getApplication () como contexto
  • ¿Cómo conectarse vía HTTPS usando Jsoup?
  • 4 Solutions collect form web for “NPE al llamar a MockitoAnnotations.initMocks () en AndroidTestCase”

    Usted podría tratar de reemplazar

     MockitoAnnotations.initMocks(this); 

    con este

     System.setProperty("dexmaker.dexcache", getContext().getCacheDir().getPath()); 

    Esto funciona para mi. Ver ref aquí

    Es un error en dexmaker para el que he enviado una corrección: https://github.com/crittercism/dexmaker/pull/24

    Para mí la solución fue usar el método Mockito.mock() para cada objeto Mocking en lugar de usar MockitoAnnotations.initMocks(this);

    Así por ejemplo:

     public class HomePresenterTest { private Repository repository; private HomePresenter presenter; @Before public void before() { repository = mock(Respository.class); presenter = new HomePresenter(repository); } //Your tests } 

    He creado un problema allí https://github.com/mockito/mockito/issues/392 Respuesta original con la revisión allí https://stackoverflow.com/a/36642606/1224247

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