我使用黄瓜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将变量注入到类中,但我想知道是否有另一种方法,如果我使用'World'对象在正确的轨道上。 提前致谢
答案 0 :(得分:1)
我使用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"
}
}
这允许我从任何类中一般设置响应对象,然后在公共步骤文件中对其进行断言。