Лучший способ повторного использования классов Java в разных проектах? - PullRequest
0 голосов
/ 29 октября 2019

В настоящее время я пишу тесты Selenium WebDriver для различных веб-сайтов, каждый из которых использует одну и ту же проприетарную среду.

Из-за этого существует множество тестовых примеров, которые могут быть очень похожими на разных веб-сайтах. Поэтому я сделал свои тестовые классы настолько универсальными, насколько это возможно, и сделал так, чтобы каждый XPath / CSS Selector / ID, используемый для поиска элементов, был определен в классе Constants, который уникален для каждого проекта.

Но в некоторых случаях код для одного и того же теста может быть одинаковым на разных сайтах, так как я написал их в общих чертах. Кроме того, каждый тест является прямым / косвенным расширением класса BasicTest, который содержит код, который, вероятно, будет повторно использоваться различными тестами (например, объявление экземпляра WebDriver и т. Д.)

То, как я думал об установке своегоструктура теста была следующей:

  • один общий проект, который «повторно используется» каждым последующим проектом;
  • один проект на веб-сайт с собственным определением класса Constants иTestSuite класс, который он может использовать для запуска как общих тестов, так и тестов, специфичных для него самого.

Это позволило бы мне не иметь копий этих общих тестов в каждом из моих тестовых проектов.

Проблема в , что я не знаю, как это настроить. GenericProject будет содержать тесты, которые требуют переменных от Constant, но нет смысла иметь универсальный Constants. Кроме того, смогу ли я вызвать эти тесты внутри своего веб-сайта для проекта TestSuites? Если я переопределю Constants в каждом конкретном проекте, будут ли эти константы использоваться для общих тестов, определенных в GenericProject? Как я могу настроить его так, чтобы я мог повторно использовать классы Проекта А внутри Проекта B, C, D ... и т. Д.?

Ответы [ 2 ]

1 голос
/ 29 октября 2019
  • Извлеките ваши константы в файл свойств, который существует в каждом модуле как src / test / resources / common.properties.
  • Используйте org.apache.commons: commons-configuration2 PropertiesConfiguration чтобы прочитать этот файл. Он отлично справится с вложенными свойствами.
  • Общий код может быть доступен в зависимости от вашего GenericModule. Официальные инструкции для двух моделей для этого (извлечь общие тесты в новый модуль или использовать тестовую флягу): здесь
0 голосов
/ 29 октября 2019

В общем, чтобы повторно использовать код в проектах, вы должны создать библиотеку, содержащую код многократного использования. Для этого вам нужно подумать о подходящем API для библиотеки.

Здесь содержатся решения о:

  • Как будет вызываться функциональность из зависимого кода
  • Как зависимый код будет предоставлять необходимые данные.

Если вы используете константы, например, для селекторов CSS, которые отличаются, но имеют одинаковую семантику, например,

  • rootframe
  • боковая панель
  • основная область
  • ...

Вы можете определить интерфейс, который может обеспечить зависимый код. Это может выглядеть так:

interface CssSelectors {
    String rootFrame();
    String sidePanel();
    //...
}

Если вы создаете это для тестов, вы также можете использовать функции вашей тестовой среды (например, Rules в JUnit).

При повторном использовании кода в тестах вы также должны учитывать другой аспект:

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

...