Burlándose método estático no funciona en la versión nueva de núcleo Mockito

Mershon:

Estoy experimentando extraño error al cambiar mockito-corede 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-coreque está causando este problema?

GhostCat saludos Monica C.:

¿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.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=179981&siteId=1
Recomendado
Clasificación