Estoy experimentando extraño error al cambiar mockito-core
de versión. Mi código:
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.reflect.Whitebox;
import static org.mockito.Mockito.validateMockitoUsage;
import static org.powermock.api.mockito.PowerMockito.doNothing;
import static org.powermock.api.mockito.PowerMockito.doReturn;
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.verifyPrivate;
import static org.powermock.api.mockito.PowerMockito.when;
import static org.powermock.api.support.membermodification.MemberMatcher.method;
@RunWith(PowerMockRunner.class)
@PrepareForTest(value = App.class)
public class TestClass {
@Before
public void setup() {
mockStatic(App.class);
when(App.getInstance()).thenReturn(mock(App.class));
}
// tests
}
El imitar App.getInstance()
bien funciona cuando estoy usando
testImplementation group:'org.mockito',name:'mockito-core',version:'2.23.0'
Pero el cambio que a la más reciente versión
testImplementation group: 'org.mockito', name: 'mockito-core', version: '2.28.2'
me da error
org.mockito.exceptions.misusing.NotAMockException: Argument should be a mock, but is: class java.lang.Class
en la línea when(App.getInstance()).thenReturn(mock(App.class));
Mi parte Mockito build.gradle:
testImplementation group: 'org.mockito', name: 'mockito-core', version: '2.28.2'
testImplementation group: 'org.powermock', name: 'powermock-module-junit4', version: '2.0.2'
testImplementation group: 'org.powermock', name: 'powermock-api-mockito2', version: '2.0.2'
¿Alguien podría dar alguna idea de por qué el cambio mockito-core
que está causando este problema?
¿Alguien podría dar alguna idea de por qué el cambio de Mockito núcleo está causando este problema?
Seguro: PowerMock (ITO) no solo trabaja con cualquier versión de Mockito.
Ver la documentación :
Mockito PowerMock
2.8.9+ 2.x
Mira eso. 2.8.something. 2. No 28 .something
Usted es simplemente la suerte de que 2.23 obras, como está esa versión también no es compatible.
Otra buena razón para ser muy cautelosos acerca de la compra en la dependencia PowerMock: reduce significativamente su capacidad para utilizar las nuevas versiones de Mockito.
Por tanto, mi personal de dos centavos: el caso de uso razonable de PowerMock (ITO) es cuando se tiene el código heredado que no puede ser probado lo contrario. Para cualquier otro proyecto, especialmente al escribir su propio nuevo código: basta con utilizar independiente Mockito. Y en lugar de utilizar el martillo PowerMock a prueba de código difícil de prueba, pasar algún tiempo para aprender cómo escribir código fácil de prueba.
En resúmen: cuando se utiliza PowerMock, es mejor que se adhieren a las versiones de Mockito que tienen la aprobación "oficial" por el equipo PowerMock.
Si no te gusta estar restringido en tales formas, creo que te dije cómo salir de ella.