gpt4 book ai didi

groovy - 如何使用 groovy 跨多个 cucumber 步骤定义文件共享变量

转载 作者:行者123 更新时间:2023-12-02 03:40:55 25 4
gpt4 key购买 nike

我正在使用 Cucumber jvm 编写带有 groovy 的测试。到目前为止,我将所有步骤定义都放在一个文件中,而且一切都运行良好。我现在希望将步骤定义移动到单独的文件中,因为我有很多文件。我遇到的问题是实例变量。我试图让我的步骤定义尽可能通用,所以任何用 @when 注释的都返回一个名为 response 的对象,而任何用 @then 注释的定义都会在响应中声明一些东西。我的问题是,有没有办法可以将这些存储在单独的文件中?我已经阅读了一些关于“世界”的内容,但我不确定这是否是我正在寻找的东西,尽管查看了 github ( https://github.com/cucumber/cucumber-jvm/blob/master/groovy/src/test/groovy/cucumber/runtime/groovy/compiled_stepdefs.groovy) 上的示例项目,但我无法让它工作。

我想要实现的一个例子是这样的:

 Scenario:
When I say hello
Then Hello should be printed

作为我的场景。然后我想要两个共享变量的类:

 class sayHello{

def response

@When('^I say hello$')
def iSayHello() {
response = "hello"
}
}

class printHello{

@Then('^Hello should be printed$')
def iPrintHello() {
assert response == "hello"
}
}

我知道我可以使用 spring 将变量注入(inject)到类中,但我想知道是否有另一种方法,以及我是否在正确的轨道上使用“世界”对象。提前致谢

最佳答案

我已经使用 groovy 的 mixin 功能找到了一个解决方案。 mixin 允许一个类继承另一个类的方法,并在运行时使用类变量。

使用上面的例子,我的解决方案是这样的:

@Mixin(printHello)
class sayHello {

@When('^I say hello$')
def iSayHello() {
response = "hello"
}
}

class printHello {

static def response

@Then('^Hello should be printed$')
def iPrintHello() {
assert response == "hello"
}
}

这让我可以从任何类中通用地设置响应对象,然后在公共(public)步骤文件中对其进行断言。

关于groovy - 如何使用 groovy 跨多个 cucumber 步骤定义文件共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20099934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com