Jmock насмехается над статическим методом

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

Я использую jmock.

Один из способов, которым я мог бы это сделать, - это иметь "класс-оболочку" вокруг статического метода и издеваться над этим, но я надеялся на лучшее решение.

Я ошибаюсь?

ОБРАТНАЯ СВЯЗЬ:

У меня должен был быть интерфейс и класс, у которых был метод, который просто вызывал статический метод. Это позволило бы мне издеваться над логикой, просто высмеивая вызов этого класса-оболочки. (Мне грязно даже говорить об этом :))

См. Соответствующий вопрос Как издеваться со статическими методами.

flicken 20.10.2008 19:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
11
1
17 293
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Powermock - это расширение EasyMock, которое позволяет имитировать статические методы.

Ответ принят как подходящий

Мы не поддерживаем фиктивные статические методы в jMock, потому что это не соответствует нашему подходу к дизайну. Мы предпочитаем не использовать статические методы для важных функций, которые могут повлиять на состояние системы. Мы склонны использовать их только для поддержки объектно-ориентированного кода и повышения его читабельности. Вот почему мы рассматриваем имитацию статических методов как намек на наличие проблемы. Единственным исключением является то, что он находится в сторонней библиотеке, но мы, вероятно, все равно обернем его чем-то более объектно-ориентированным.

JMockit - еще один инструментарий, который позволяет имитировать статические методы (а также методы final, конструкторы и т. д.).

Я не вижу никаких проблем с использованием статических методов рассудительный при разработке другого объектно-ориентированного решения.

Например, один шаблон / идиома, который мне нравится использовать, - это статический фасад, в частности, чтобы предоставить более простой и легкий в использовании API для подсистемы сохраняемости в бизнес-приложении. На мой взгляд, нет другого решения более элегантного, чем что-то вроде:


    List<Person> peopleAboveAge = 
        find("select p from Person p where p.age >= ?", age);

где метод find статически импортируется из класса PersistenceFacade, который определяет только статические методы и инкапсулирует, как получить соответствующий экземпляр Session / EntityManager. Это гибкое и удобное решение для модульного тестирования. Я использовал его в бизнес-приложении, в котором было более 500 постоянных сущностей, использующих Hibernate. Статический фасад помог, когда мы перешли с Hibernate 2 на Hibernate 3, когда мы перешли с Oracle на Sybase, а затем обратно на Oracle, и когда мы начали использовать аннотации JPA вместо файлов «hbm.xml» для сопоставления ORM.

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