2016-12-02 13 views
1

Я пробуя пример издеваться конструктором, представленный в ссылку нижеИспользования метода PowerMock.expectNew() не может получить покрытие кода

https://github.com/powermock/powermock/wiki/mockconstructor

Хотя перевалы Junit бежать, но отчет о покрытии кода для PersistenceManager класс равен нулю.

Это потому, что @PrepareForTest (PersistenceManager.class), и без этой строки код не работает.

Как мне высмеять вызов конструктора и получить покрытие на 100% кода.

ответ

0

Возможно, вы этого не сделаете. Или вам нужно быть счастливым.

То, что я говорю это: природа из PowerMock (ITO) является изменений ваших байт-кода. Другими словами: ваши модульные тесты (потенциально) не, выполняющие файлы классов, скомпилированные javac/вашей IDE. Чтобы сделать свою черную магию, PowerMock будет изменяет ваше содержимое файла класса при загрузке.

И, к сожалению, инструменты для покрытия кода работают одинаково - они должны обладать инструментом содержимым файла классов для выполнения своих частей.

Таким образом, вы не должны удивляться, когда использование PowerMock приводит к «нулевому охвату». Иногда это работает, иногда это не работает. И очень плохая часть: у вас, вероятно, будет очень много времени, чтобы найти решение этой проблемы. сложно. Для этого существуют различные ошибки, например one; и, как сказано: иногда это работает, иногда это не так. Очень многое зависит от того, что вы делаете; и какие рамки вы используете.

Итак, существенный неответ - обратите внимание на необходимость использования PowerMock. Понимаете, есть вероятность, что вы просто написали непроверяемый/труднодоступный производственный код. И теперь вы думаете, что вам нужен большой молот PowerMock, чтобы исправить эту проблему в вашем коде. Вместо этого: узнайте, как создать testable код, например, наблюдая за этими videos. А затем переструктурируйте свой производственный код и избавьтесь от PowerMock. Я сделал это много месяцев назад; и я никогда не сожалел о том, что сделал это. Теперь я полагаюсь на EasyMock/Mokito ... и покрытие кода просто работает для меня.

 Смежные вопросы

  • Нет связанных вопросов^_^