Игнорирование вызова внутреннего статического вызова

С приведенным выше фрагментом кода можно ли протестировать метод, игнорирующий вызов ---- +: = 1 =: + ---- без необходимости помещать весь оператор в логическое условие?Вот фрагмент кода модульного теста:Примечания:Рефакторинг ---- +: = 3 =: + ---- следует избегать.Даже при плохой ОО-структуре рефакторинг обходится дорого.Подпись метода блокируется, если только другой шаблон не применим для замены.Попытка использования ---- +: = 4 =: + ---- и ---- +: = 5 =: + ---- в целевом статическом методе, заглушка не работала при отладке во время выполнения.
4 голоса | спросил Kaido Shugo 7 WedEurope/Moscow2016-12-07T12:39:50+03:00Europe/Moscow12bEurope/MoscowWed, 07 Dec 2016 12:39:50 +0300 2016, 12:39:50

1 ответ


0
Поскольку ваши комментарии указывают на то, что изменение вашего производственного кода невозможно, вам «просто» придется погрузиться в аспекты статического моделирования PowerMock;как указано здесь, например.По сути, вам нужно включить IgnoreCall для статического моделирования ;и затем вы делаете вызовы ignoreMethodCall () без операции.Но если вы продолжаете спрашивать: основная проблема в вашем вопросе заключается в том, что вы хотите смоделировать статический метод, который является пустым .У меня есть полный пример ниже, но перед этим некоторые пояснения.Дело в том, что вы вызываете метод по двум причинам:Имеет побочный эффектВозвращает значение и, возможно, также вызывает побочный эффектПустой метод может быть вызван только для побочных эффектов.И дело в том, что когда вы делаете статический макет, тогда это работает на уровне класса .Значение: вы указываете PowerMock «предотвращать» выполнение любых статических методов некоторого класса;Вы просто «стираете» побочные эффекты всех этих статических методов!Итак, когда PowerMock приказывает выполнять эти статические макеты, все пустые методы уже "ушли"Но, как уже было сказано, вы также можете вызывать методы для их возвращаемого значения.И тогда наступает момент, когда запускается метод Mockito ---- +: = 0 =: + ---- . Вы используете этот метод, чтобы сказать: когда вызывается этот метод, возвращающий значение, тогда делайте то или это.Короче;Вот [mcve], использующий элементы, которые вы просили:Как в вашем примере ... есть IgnoreCall;использовал внутри этого статический метод, который я только что назвал «вызов».Это печатает:Когда я захожу и комментируюЭто печатает:Итак, простой пример, который должен точно сказать вам , что вам нужно делать.Я работал с eclipse neon, IBM java8 JDK, и просто импортировал все JAR-файлы из powermock-mockito-junit-1.6.6.zip в свой тестовый проект.
ответил GhostCat 9 FriEurope/Moscow2016-12-09T13:30:14+03:00Europe/Moscow12bEurope/MoscowFri, 09 Dec 2016 13:30:14 +0300 2016, 13:30:14

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132