Шаблон проектирования программного обеспечения для логики ветвления?

В контексте автоматизации тестирования я использую простую версию 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 более высокого уровня.

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