2017-02-22 70 views
1
PowerMockito.spy(SomeClass.class); 
PowerMockito.doNothing().when(SomeClass.class); 
SomeClass.StaticVoidMethod(); 

Это не работает. Я получаю UnfinishedStubbingException.Как заглушить статические методы void, у которых нет аргументов?

+0

Необходимое средство для издевательства статических методов - это общий запах кода, предлагающий вам переместить этот метод в интерфейс или класс, чтобы вы могли ввести макет или фальшивый экземпляр и передать * этот * в тестируемый код, а не фальсифицировать статический метод глобально. – dimo414

+0

Невозможно изменить код, так как он не написан мной. Любые предложения о том, как проверить это? – mhsree

+1

«Это не написано мной». Это происходит из сторонней библиотеки? Пожалуйста, дайте более подробную информацию. – davidxxx

ответ

1

Если вы действительно не можете изменить «проверенный код»; и что статический вызов дает вам проблемы, тогда ваш единственный вариант - использовать PowerMock; и, как показывает другой ответ, их documentation дает точное описание, как это сделать (и для записи: внимательно прочитайте и следуйте этим инструкциям).

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

Короче говоря: PowerMock может решить эту проблему; но не удивляйтесь, когда вы создадите другие проблемы для вас в конечном итоге.

+0

Спасибо! Ты прав! – mhsree

0

Вы не совсем закончили предложение Мокито. Вы забыли указать заглушку, какой метод он будет вызывать.

Чтобы завершить предложение ... не забудьте вызвать вызов метода в конце.

PowerMockito.doNothing().when(SomeClass.class).StaticVoidMethod(); 
+0

Как еще я могу это сделать? – mhsree

+0

Почему ответ? :) – davidxxx

+0

@mhsree: Я пересмотрел ответ; Я чувствовал, что это было очевидно, о том, о чем я говорил, но теперь я понимаю, что это не так. – Makoto

1

Вы можете использовать

PowerMockito.mockStatic(SomeClass.class) 

Это будет издеваться все методы этого класса.

Для получения дополнительной информации перейдите по этой ссылке https://github.com/powermock/powermock/wiki/MockStatic

Ура !!!

+0

Я пробовал это, Метод все еще выполняется. – mhsree

+0

@mhsree Затем вам не хватает одного из шагов, перечисленных здесь. Будьте уверены: PowerMock - это ужасный инструмент, но когда вы используете его правильно, он выполняет свою работу. – GhostCat