В новой версии mockito-core статический метод не работает - PullRequest
1 голос
/ 07 июня 2019

При смене версии mockito-core возникает странная ошибка.Мой код:

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
}

Перемешивание App.getInstance() отлично работает, когда я использую

    testImplementation group:'org.mockito',name:'mockito-core',version:'2.23.0'

Но при переходе на последнюю версию

testImplementation group: 'org.mockito', name: 'mockito-core', version: '2.28.2'

выдает ошибку

org.mockito.exceptions.misusing.NotAMockException: Argument should be a mock, but is: class java.lang.Class

В сети when(App.getInstance()).thenReturn(mock(App.class));

Моя часть build.gradle mockito:

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'

Может кто-нибудь дать какие-либо идеи, почему изменение mockito-core вызывает эту проблему

1 Ответ

3 голосов
/ 07 июня 2019

Может ли кто-нибудь представить какие-либо идеи, почему смена mockito-core вызывает эту проблему?

Конечно: PowerMock (ito) не работает только с любой версией Mockito.

См. Их документацию :

Mockito PowerMock
2.8.9+  2.x

Видите это. 2.8.something. Не 2. 28 . Что-то

Вам просто повезло, что 2.23 работает, так как эта версия также не поддерживается.

Еще одна веская причина проявлять осторожность при покупке зависимости PowerMock: она значительно снижает вашу способность использовать более новые версии Mockito.

Таким образом, мои личные два цента: единственный разумный вариант использования PowerMock (ito) - это когда у вас есть устаревший код, который нельзя протестировать иначе. Для любого другого проекта, особенно при написании собственного, нового кода: просто используйте автономный Mockito. И вместо того, чтобы использовать молоток PowerMock для тестирования трудно тестируемого кода, потратьте некоторое время на то, чтобы научиться писать простой в тестировании код.

Короче говоря: при использовании PowerMock лучше придерживаться версий Mockito, которые имеют «официальное» одобрение Team PowerMock.

Если вам не нравится, когда вас ограничивают такими способами, я думаю, что я сказал вам, как из этого выйти.

...