Мы реализуем проект автоматизации веб-тестирования для некоторых интранет-приложений.
Чтобы упростить написание каждого теста, мы разрабатываем Java DSL, который может быть реализован с использованием различных адаптеров (до сих пор мы выбрали Sahi и Selenium/WebDriver, так как хотим сравнить их вместе с точки зрения производительности, удобочитаемости, ремонтопригодность и др.).
Мы определили два типа операций в DSL:
1) Примитивный: его реализация, безусловно, должна иметь дело со спецификой HTML/Selenium/Sahi/и т. д. Пример: (с использованием веб-драйвера Sahi)
public void insertProjectRecord(String projectName) {
b.link("Create new project").click();
b.textbox("ctl00$ProjectForm$Name").setValue(projectName);
b.span("Insert").click();
}
2) Non-Primitive: операция, которую стоит включить в наш DSL в целях повторного использования, хотя ее можно построить с использованием примитивов. Пример:
public void createFormulation(String projectName, String rteDummyText) {
goToAddProjectPage();
insertProjectRecord(projectName);
switchToEditModeForFirstAvailableRecord();
editBeneficiaryCountries();
editAcronyms(rteDummyText);
saveSectionChanges();
}
Вопрос: изначально мы использовали интерфейс только с примитивными операциями, но позже мы изменили его на абстрактный класс, чтобы включить непримитивные методы (которые при необходимости разрешено переопределять конкретным реализациям). ). Однако смешивать примитивы и не-примитивы кажется неправильным, и список методов, безусловно, станет очень длинным.
Какой другой подход вы бы предложили и/или рассмотрели?