Структурирование определений шагов JVM Cucumber в разных файлах Java

Я работаю над проектом автоматизации на основе Appium-cucumber-Java, который со временем будет расти.

В настоящее время у меня есть определения Step Given, When, Then в одном файле для iOS и другом файле для Android. Оба эти файла являются наследниками общего базового класса. Я инициализирую необходимые объекты страницы, используя ключевое слово new в обоих этих файлах.

Теперь я хотел бы немного разбить его на модули и создать файл CommonStepDefs. Но я начинаю получать исключение нулевого указателя.

Не могли бы вы предложить какой-либо метод, похожий на этот, или образец примера для создания этого

Заранее спасибо.

public class AndroidTestsStepDefs_usingFactory extends BaseTestClass {

AndroidChooseCountryPage androidChooseCountryPage;
AndroidCountrySelectionPage androidCountrySelectionPage;
OrderPrints orderPrints;
AndroidHomePage androidHomePage;
TourPage tourPage;

public AndroidTestsStepDefs_usingFactory() throws IOException, AWTException {
}


@Given("^the app has been installed$")
public void the_app_has_been_installed() throws Throwable {
    initializeDriver("android");
    super.setCoreAppType("Android");
}

person user2451016    schedule 28.06.2017    source источник
comment
Пожалуйста, предоставьте более подробную информацию, какая строка вызывает исключение?   -  person fg78nc    schedule 29.06.2017


Ответы (1)


Вы заинтересованы в совместном использовании состояния между вашими файлами определений шагов.

Идиоматика совместного использования состояния в Java заключается в создании общего объекта, который используется на всех этапах с помощью внедрения зависимостей.

Если в вашем проекте используется структура внедрения зависимостей, используйте ее для совместного использования состояния между классами определения шагов. Cucumber-JVM поддерживает множество различных платформ внедрения зависимостей. Ваш, вероятно, поддерживается.

Если вы не используете внедрение зависимостей, я предлагаю использовать PicoContainer.

Я написал два сообщения в блоге по этой теме. Совместное использование состояния с помощью

person Thomas Sundberg    schedule 04.07.2017
comment
Большое спасибо, действительно оценили. - person user2451016; 07.07.2017
comment
Большое спасибо, очень признателен. Еще два запроса - 1) Может ли Spring ApplicationContext использоваться для временного хранения удобных вещей или нам нужно создать какую-то модель данных. 2) Я использую Cucumber + Appium + Java, и на этом фоне немного запутался в том, использовать ли TestNG ITestContext или Spring ApplicationContext для хранения вышеупомянутых состояний. Пожалуйста, подумайте об этом. Спасибо - person user2451016; 07.07.2017
comment
Я бы, наверное, сохранил все, что мне нужно, в моем собственном World-объекте. World-объект - это довольно несложная структура, которая дает много свободы, и мне не нужно изучать еще один фреймворк. - person Thomas Sundberg; 08.07.2017
comment
Еще один запрос - я только начал использовать TestNG (класс огурца, расширяющий класс AbstractTestNGCucumberTests). A) Итак, как мы могли добиться параллельного запуска с помощью Maven + PicoContainer + Cucumber. Поскольку, как я понимаю, нелегко иметь параллельные прогоны с использованием Maven surefire, и поэтому люди используют TestNG. B) Или возможно добиться параллельного запуска без использования TestNG, то есть каким-то образом с использованием PicoContainer, Maven & Cucumber-JVM. Добрый совет. Спасибо - person user2451016; 11.07.2017
comment
Я не знаю. Я никогда не исследовал запуск Cucumber параллельно. - person Thomas Sundberg; 13.07.2017
comment
Контейнер Pico работает нормально. Пожалуйста, посоветуйте, как расположить крючки для огурца «После» и «До». Ответ на вопрос - Не разрешается использовать крючок «После огурца» в BaseClass. Должны ли они присутствовать во всех классах StepDefs? Исключение в основном потоке cucumber.runtime.CucumberException: вам не разрешено расширять классы, которые определяют определения шагов или перехватчики. class stepDefs.PrintTestsStepDefs расширяет ядро ​​класса. - person user2451016; 09.02.2018
comment
Задайте новый вопрос. Добавление вопросов в комментарий затруднит их поиск другими пользователями. - person Thomas Sundberg; 11.02.2018