jmock насмешка статического метода

Да, вы можете, но это становится трудно читать, см. здесь для примеров вложенных троичных.

Вероятно, лучше сделать переключатель :

  String order;
  Color color;
        switch (order)
        {
            case "PO":
                color = Color.LightGreen;
                break;
            case "SO":
                color = Color.Lavender;
                break;
            default:
                color = Color.LightBlue;
                break;
        }

отредактированный в соответствии с переключателем в вашем случае;)

11
задан Paul Whelan 20 October 2008 в 15:43
поделиться

3 ответа

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

8
ответ дан 3 December 2019 в 08:06
поделиться

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

2
ответ дан 3 December 2019 в 08:06
поделиться

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

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

Например, один шаблон / идиома, который мне нравится использовать, - это статический фасад , особенно для обеспечения более простого и легкого использования 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.

5
ответ дан 3 December 2019 в 08:06
поделиться
Другие вопросы по тегам:

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