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:

  • Un escáner de QR dentro de un fragmento
  • Separación entre filas en la disposición de la tabla
  • Android: cómo deshabilitar los controles durante la barra de progreso está activa
  • Fondo de icono de notificación grande
  • Cómo agregar iconos a Preferencias
  • Establece loadURLTImeOutValue en la vista web
  •  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?

  • ¿Se está destruyendo la actividad porque la orientación ha cambiado o porque la aplicación se está cerrando?
  • Java.util.ConcurrentModificationException android después de eliminar elementos de la lista de array
  • Android Asyntask: Usar referencia débil para el contexto para evitar la rotación del dispositivo de pantalla
  • Técnica subyacente de FaceDetector de Android
  • ¿"Borrar datos" también matan a la aplicación?
  • Gradle build falla en la tarea de pelusa
  • 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.