MissingMethodInvocationException при использовании PowerMockito для тестирования статического метода

Я прочитал несколько сообщений об использовании powermockito вместо просто mockito для тестирования статических методов, однако после переключения на power mockito я все еще получаю ту же ошибку. Ниже мой класс и исключение. Ни один из случаев исключения не объясняет мою ошибку.

@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassToBeMocked.class})
public class Test extends AbstractTestNGSpringContextTests {
    @Mock
    Object1 o1;

    @BeforeMethod
    public void init() {
        mockStatic(ClassToBeMocked.class);

        PowerMockito.when(ClassToBeMocked.getMethod()).thenReturn("string");
    }

Последняя строка кода вызывает это исключение org.mockito.exceptions.misusing.MissingMethodInvocationException: when () требует аргумента, который должен быть «вызовом метода в имитации». Например: когда (mock.getArticles ()). thenReturn (статьи);

Кроме того, эта ошибка может появиться по следующим причинам: 1. вы используете один из методов: final / private / equals () / hashCode (). Эти методы не может должны быть заглушены / проверены. Методы имитации, объявленные для закрытых родительских классов, не поддерживаются. 2. внутри when () вы вызываете метод не для имитации, а для какого-то другого объекта.

Я столкнулся с той же проблемой. Вы когда-нибудь решали эту проблему?

martin_wun 05.07.2021 13:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
1 260
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Не могли бы вы попробовать это:

@RunWith(PowerMockRunner.class)
@PrepareForTest({ClassToBeMocked.class})
public class Test extends PowerMockTestCase {
    @Mock
    Object1 o1;

    @ObjectFactory
    public IObjectFactory getObjectFactory() {
        return new org.powermock.modules.testng.PowerMockObjectFactory();
    }

    @BeforeMethod
    public void init() {
        mockStatic(ClassToBeMocked.class);

        PowerMockito.when(ClassToBeMocked.getMethod()).thenReturn("string");
    }
Ответ принят как подходящий

Я на самом деле борюсь с подобной проблемой, но я вижу что-то не так с вышеизложенным. Аннотации @RunWith являются частью библиотеки JUnit. AbstractTestNGSpringContextTests и @BeforeMethod являются частями библиотеки TestNG. Возможно, поэтому у вас возникают проблемы. Если кто-то не хочет противоречить этому утверждению, я считаю, что две библиотеки модульных тестов не работают друг с другом. По крайней мере, не так.

@RunWith (PowerMockRunner.class) не сможет подобрать @BeforeMethod, как если бы это был org.junit.Before.

Другие вопросы по теме