Mockito AbstractMethodError en initMocks

Así que he estado luchando casi todo el día tratando de conseguir Mockito para trabajar para mi proyecto de Android. He añadido todo a mi archivo de compilación de Gradle:

androidTestCompile 'org.mockito:mockito-core:2.0.29-beta' androidTestCompile "junit:junit:4.12-beta-3" androidTestCompile 'com.google.dexmaker:dexmaker:1.2' androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2' 

Y he intentado ejecutar una prueba que realmente no hace nada:

 @RunWith(MockitoJUnitRunner.class) public class LoginActivityTest extends ActivityInstrumentationTestCase2<LoginActivity> { private LoginActivity loginActivity; private EditText et_email; private EditText et_password; private Button btn_login; @Mock SpiceManager manager; public LoginActivityTest(){ super(LoginActivity.class); } @Override public void setUp() throws Exception { super.setUp(); loginActivity = getActivity(); MockitoAnnotations.initMocks(this); //manager = mock(SpiceManager.class); loginActivity.spiceManager = manager; et_email = (EditText) loginActivity.findViewById(R.id.et_email); et_password = (EditText) loginActivity.findViewById(R.id.et_password); btn_login = (Button) loginActivity.findViewById(R.id.btn_login); } @Override public void tearDown() throws Exception { super.tearDown(); } public void testLoginEmpty() throws Exception { verify(manager).execute( any(LoginRequest.class), anyString(), anyLong(), any(LoginActivity.LoginRequestListener.class)); } } 

La razón por la que quiero burlarse del servicio es porque me gustaría mantener la parte de la red fuera de la prueba. No hay necesidad de enviar una solicitud de red para una prueba sencilla, ¿verdad?

De todos modos, la aplicación se basa pero cuando la prueba real comienza a ejecutarse falla (o más bien se bloquea) con un AbstractMethodError :

 Running tests Test running started java.lang.AbstractMethodError: abstract method "org.mockito.plugins.MockMaker$TypeMockability org.mockito.plugins.MockMaker.isTypeMockable(java.lang.Class)" at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:26) at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:21) at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:167) at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:161) at org.mockito.internal.MockitoCore.mock(MockitoCore.java:58) at org.mockito.Mockito.mock(Mockito.java:1410) at org.mockito.Mockito.mock(Mockito.java:1288) at be.sanmax.membr.activities.LoginActivityTest.setUp(LoginActivityTest.java:50) 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:1837) 

Esto me parece extraño ya que la clase SpiceManager no contiene ningún método abstract . Sin embargo, es parte de algún paquete que no escribí ( com.octo.android.robospice ). Pero eso no debería ser un problema. ¿Deberia?

Y si ese es el problema, ¿cómo podría yo ir sobre factoring fuera de cualquier prueba? Sólo quiero probar el funcionamiento de la aplicación, no la conexión de red …

Dexmaker no soporta Mockito 2.0 ya que la definición de MockMaker ha cambiado. Le sugiero que use Mockito 1.10.19, pero luego se ejecutará en este NPE para el que he enviado una corrección .

Para mí, ayudó a usar el nuevo dexmaker (y eliminar todas las demás dependencias powermock / mockito):

  androidTestCompile 'com.linkedin.dexmaker:dexmaker-mockito:2.2.0' 

Mockito.initAnnotations y @RunWith son incompatibles entre sí. Ambos inicializan las anotaciones. Trate de quitar uno de los dos. Sugerí mantener el corredor.

Para mí ayudó a cambiar de mockito a powermock. La degradación de mockito a 1.x me dio la excepción null, updgrading a 2.x me dio el AbstractMethodError. Sólo incluir en las dependencias (en lugar de mockito):

 testCompile "org.powermock:powermock-module-junit4:1.6.5" testCompile "org.powermock:powermock-module-junit4-rule:1.6.5" testCompile "org.powermock:powermock-api-mockito:1.6.5" testCompile "org.powermock:powermock-classloading-xstream:1.6.5" 
  • Android Instrumentación de Pruebas - UI Thread Issues
  • Especificación de XML adicional para AndroidManifest generado por gradle
  • Error de conflicto de dependencia en mi aplicación Android que tiene Android Tests
  • Cómo crear un servidor para la comunicación con una aplicación de Android
  • Tarea de integración de prueba independiente en gradle con android
  • Cómo comprobar que la actividad muestra el diálogo durante la prueba de unidad de Android
  • ¿Cómo puedo analizar una suite de pruebas junit?
  • ¿Qué hace la referencia `android.accounts.Account.type`?
  • Cómo seleccionar el primer elemento de un spinner en una prueba
  • Android: Espresso no espera hasta que se muestre fragmento o actividad para que cada prueba fallara
  • Excluir el dispositivo de prueba del registro de Firebase Analytics
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.