3

我正在使用黄瓜 jvm 用 groovy 编写测试。到目前为止,我将所有步骤定义都放在一个文件中,并且一切正常。我现在正在寻找将步骤定义移动到单独的文件,因为我有很多文件。我遇到的问题是实例变量。我试图让我的步骤定义尽可能通用,所以任何用@when 注释的定义都会返回一个名为响应的对象,而任何用@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”对象的正确轨道上。提前致谢

4

1 回答 1

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

这允许我从任何类中设置响应对象,然后在公共步骤文件中对其进行断言。

于 2013-11-25T12:33:08.790 回答