在多个步骤定义类之间传递场景上下文

时间:2018-11-22 09:22:27

标签: java automation cucumber testng

因此,我开始使用Cucumber / TestNG / Java / selenium开发框架 我有一个上下文类,该类通过键值对形式的枚举来保存scenariocontext 引用自here

我的问题是: 对于功能中的特定场景,步骤定义在多个类中定义:

  

样本功能

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
}
}

所以

每个步骤定义的大脑类对象都会不同,这无济于事,因为我希望整个场景中的上下文都相同

即使我在Runner类中实例化Brain,该实例对于测试类的每个实例都是新的

为克服这个问题,我想到的一种可能的解决方案是序列化和反序列化

在@BeforeClass方法中,我将拥有:

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 :(得分:0)

用黄瓜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类的引用变量,在场景中它将保持不变。

请仔细阅读this文章以获取详细说明