![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
priam220 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: нет Всего: 8 |
Автоматизированное тестирование. Класс Screen описывает окно Веб-приложения. По определенным причинам, мы не используем конструктор. Но испльзуем метод open() для создания объекта.
как будет правильно работать с этим методом: Screen screen = Screen.open(); т.е. объявить статическим метод и и возвращать объект типа Screen (public static Screen open(){... return new Screen}) либо: Screen screen = new Screen (); screen.open(); (public void open(){...}) и самое главное, без чего Ваш ответ, не будет ответом, ПОЧЕМУ? Заранее спасибо. |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 1 Всего: 159 |
Статический метод нельзя переопределить. А это может понадобиться в юнит тесте для подмены реальной реализации на заглушку. Статический метод это зависимость от реализации, а не от абстракции, т.е. нарушение DIP. Его следует использовать с осторожностью. Какие могут быть альтернативы: шаблон "метод фабрики" или использование IoC. Сам же класс на мой взгляд следует разделить на интерфейс Screen и его реализацию ScreenImpl.
|
|||
|
||||
priam220 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: нет Всего: 8 |
powerOn, спасибо тебе за ответ. Я еще обмозгую твои слова, если появится новый вопрос, буду надеятся на такую же оперативность. Еще раз спасибо.
|
|||
|
||||
Старовъръ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.5.2008 Репутация: 2 Всего: 10 |
1. Вариант со статичеким методом больше похож на SomeClass.getInstance().
2. На статические методы так же можно делать заглушки, для этого существуют специальные библиотеки, их работа основана на прокси классах, они используют CGLIB как основу. Но, имхо, это через одно место, лучше использовать best practice приведенные powerOn'ом. 3. Если проводить аналогию с обычным окном, то вполне логично, что оно будет сначала создаваться, а потом (не обязательно сразу) показываться, то есть вызывать open() отдельно - эт нормально. -------------------- |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 1 Всего: 159 |
угу, PowerMock например умеет, но это, опять же, когда рефакторинг кода по тем или иным причинам невозможен. |
|||
|
||||
priam220 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 4.6.2010 Репутация: нет Всего: 8 |
Спасибо!
Это сообщение отредактировал(а) priam220 - 22.6.2010, 22:34 |
|||
|
||||
Sun |
|
|||
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: нет Всего: 48 |
priam220, класс Screen можно сделать абстрактным и сделать метод open() абстрактным. Дальше в потомках уже реализовывать его для каждого конкретного экрана.
Это позволит тебе использовать в качестве параметров методов абстрактный класс Screen и тебе не нужно париться по поводу того какой ты туда скрин передал, у тебя будет всегда вызыватся нужный тебе метод open(). В случае со статическим методом тебе прийдется всегда явно указывать имя класса. Вообщем статический метод для open() - очень плохое решение. -------------------- Account removed |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Design, Quality, Testing | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |