Шаблон проектирования программного обеспечения для логики ветвления?
В контексте автоматизации тестирования я использую простую версию Pattern Object Page и сталкиваюсь с проблемой избыточности в моем коде.
Тем не менее, в классе у меня есть несколько методов, которые в основном делают одно и то же, но просто возвращают разные объекты страницы:
class Checkout {
gotoNextPageExpectCreditCardPage() {
clickSubmitButton();
return new CreditCardPage();
};
gotoNextPageExpectPaypalPage() {
clickSubmitButton();
return new PaypalPage();
};
...
gotoNextPageExpectErrorPage() {
clickSubmitButton();
return new ErrorPage();
};
}
Я провел некоторое исследование и подумал о некоторых шаблонах проектирования, таких как State Pattern, Template Method, Chain-of-ответственность, но я также думаю, что это может быть излишним, и мне придется сделать огромный рефакторинг.
Кто-нибудь придумает более простое решение?
PS: я использую node.js
1 ответ
PageObjectModel имеет свои плюсы и минусы, как и любой другой шаблон. Может быть, вам нужно еще раз подумать, каков ваш случай и почему вы его используете. В большинстве учебных пособий вы найдете, что это очень легко и просто реализовать, но они решают и демонстрируют игрушечные проблемы, а не реальные. Я использую POM только в том случае, если API-интерфейс тестовой среды поддерживает его специально, например, pywinauto. Понятия, приведенные здесь, позволяют вам связывать элементы так:
app.UntitledNotepad.Edit
И нет смысла повторять такую структуру экрана по всей вашей кодовой базе, просто поместите детали пользовательского интерфейса в POM и предоставьте элемент, когда необходимо взаимодействие.
notepad.EditInput.type_keys("pywinauto Works!", with_spaces = True)
Как видите, это очень далеко от Selenium и Web-автоматизации. Но есть много других шаблонов, которые вы можете искать:
- Объектный репозиторий очень полезен, когда дело доходит до удобства сопровождения сценариев тестирования пользовательского интерфейса, я использовал его во многих крупных проектах с большим успехом (например, платформа mSOA с более чем 40 веб-сайтами)
- Сценарий - это модель, ориентированная на пользователя, которая помогает вам перенести фокус автоматических приемочных тестов с низкоуровневых взаимодействий с системой на размышления о том, кто пользователи вашей системы, чего они хотят достичь, взаимодействуя с вашей системой. и как именно они собираются это сделать.
- Миссия помогает вам модулировать ваш код и создавать персон, которые описывают деловые или функциональные взаимодействия пользователей программного обеспечения.
Стремление к полному ответу - хорошая коллекция других шаблонов в мире xUnit - это http://xunitpatterns.com/. Однако не существует единого шаблонного решения для вашей тестовой среды, которую вы создаете. Нужно следовать и использовать другие принципы и концепции дизайна. Например, логика вашего домена (специфическая для бизнеса) должна быть наслоена на DSL, не имея представления о базовых драйверах или спецификациях BDD более высокого уровня.