如何在Spock测试中重用代码

时间:2017-01-05 20:16:00

标签: spock geb

我正在为网站测试编写基于Spock + Geb的测试。网站用于创建商品,稍后可以对其执行各种操作(确认,拒绝,撤销)。我已经创建了创建商品的工作方案。但是现在当我谈到需要为各种动作组合实现场景时,我希望能够重用"创建提议"在这些其他情况下。不幸的是,我无法找到任何例子或想办法如何做到这一点。有人可以给我任何想法吗?

顺便说一句,我需要按照预定义的顺序执行操作,以便在我的规范中使用逐步注释。

1 个答案:

答案 0 :(得分:1)

单页操作:

如果没有看到代码示例,很难说,但这样做的一种方法是将您的操作方法(确认,拒绝,撤销)定义为Page类中的简单方法:

class ActionsPage extends Page {

  static content = { 
    //Page content here
  }

  def confirm (){
    //Code to perform confirm action on the page
  }

  def reject (){
    //Code to perform reject action on the page
  }

然后在您的规范类中,您可以

def "Test confirm action"(){
  when: "we go to the actions pages"
  to ActionsPage

  and: "we perform a confirm action"
  confirm()

 then: "something happens"
 //Code which checks the confirmation worked 
} 

这是有效的,因为Geb使用Groovy的方法缺少东西来在当前页面上找到名为" confirm()"的方法的名称,并将执行该代码。

多页操作:

如果操作很复杂并涉及导航到多个页面,最好为需要执行操作的测试创建一个抽象基类:

//Not @Stepwise
abstract class BaseActionsSpec extends Specification {

  //Note: don't use Spock when/then blocks in these methods as they are not feature methods
  protected void confirm(){
    //Code to perform multi-page action
  }

  protected void reject(){
    //Code to perform multi-page action 
  }
}

然后是扩展类:

@Stepwise
class ConfirmActionSpec extends BaseActionsSpec{

      def "Test confirm action"(){
        when: "we go to the actions pages"
        to ActionsPage

        and: "we perform a confirm action"
        confirm() //calls method in super class

        then: "something happens"
       //Code which checks the confirmation worked 
    }
}