Передача сценария между несколькими классами определения шагов - PullRequest
0 голосов
/ 22 ноября 2018

Итак, я начал разработку фреймворка с использованием Cucumber / TestNG / Java / selenium. У меня есть класс Context, который сохраняет сценарий-текст с помощью перечислений в виде пары ключ-значение. Ссылка здесь здесь

Моя проблема заключается в том, что: Для определенного сценария в функции определения шагов определяются в нескольких классах:

Пример функции

Feature: A feature
Scenario: Scenario
Given Statement 1
Then Statement 2

Class1

Class firstDef{
TestRunner test;
public firstDef(TestRunner test){
this.test = test
}
Brain context = new Brain();
@Given("Statement1")
void method1(){
}
}

Класс 2

Class secondDef{
TestRunner test;
public secondDef(TestRunner test){
this.test = test
}
Brain context = new Brain();
@Given("Statement2")
void method1(){
}
}

Класс TestRunner

Class TestRunner{
//some code
@Test
public method1(){
//some code
}
}

Итак,

Объект класса мозга для каждого определения шага будет разным, это не помогает, так как я хочу, чтобы контекст был одинаковым на протяжении всего сценария

Даже если я создам экземпляр класса Brain in Runner, этот экземпляр будет новым для каждого экземпляра класса тестирования

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

В методе @BeforeClass я буду иметьe:

File f = new File(path);
if(!f.exists()){
Brain context = new Brain();
FileOutputStream fos = new FileOutputStream(name);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(context);
}

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

Является ли вышеуказанный метод правильным или есть лучший способ преодолетьта же проблема

1 Ответ

0 голосов
/ 28 ноября 2018

Внедрение в конструктор с помощью Cucumber PicoContainer работает как обаяние для вышеуказанной проблемы

Просто добавьте зависимость:

<!-- https://mvnrepository.com/artifact/info.cukes/cucumber-picocontainer -->
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-picocontainer</artifactId>
        <version>1.2.5</version>
        <scope>test</scope>
    </dependency>

в ваш pom.xml (для проектов Maven) и передайте HashMapСсылочная переменная класса в нескольких классах определения шага, и она останется неизменной в сценарии.

Пожалуйста, ознакомьтесь с этой статьей для подробного объяснения

...