当前位置: 首页 > 知识库问答 >
问题:

基于参数化Spock框架的行为测试

贺栋
2023-03-14
def 'behaviour tests for route A'() {
 when:
   doA();

 then:
  data == 'Hi'
}

def 'behaviour tests for route B'() {
 when:
   doB();

 then:
  data == 'Hi'
}

void doA(){
 ...
}

void doB(){
 ...
}
@Unroll
def 'behaviour tests for route #name'() {
     when:
       route
    
     then:
      data == 'Hi'

     where:
      name | route
      'A'  | doA()
      'B'  | doB()
}

有办法做吗?

共有1个答案

何勇
2023-03-14

可以使用闭包提取要在when块中执行的代码。

class ClosureSpec extends Specification {

  @Unroll
  def 'behaviour tests for route #name'() {
    when:
    def data = route()

    then:
    data == 'Hi'

    where:
    name | route
    'A'  | { doA() }
    'B'  | { doB() }
  }

  def doA() {
    return 'Hi'
  }

  def doB() {
    return 'Hi'
  }
}

或者您可以使用groovys的动态特性来传递方法名

class DynamicSpec extends Specification {

  @Unroll
  def 'behaviour tests for route #name'() {
    when:
    def data = this."do$name"()

    then:
    data == 'Hi'

    where:
    name | route
    'A'  | _
    'B'  | _
  }

  def doA() {
    return 'Hi'
  }

  def doB() {
    return 'Hi'
  }
}

根据用例,我会使用闭包,但是动态方法名也有它的用途,尤其是当您想要传递参数时。

 类似资料:
  • WebUI automation testing framework based on Selenium 介绍: pyse基于selenium(webdriver)进行了简单的二次封装,比selenium提供的方法操作更简洁。 起因:   python + selenium 自动化测试写久了发现selenium(webdriver)提供原生的方法并简便,于是,产生了二次封装的想法。想不到太炫酷的名

  • 我很难在Java项目中使用Spock框架进行测试。我有以下内容: 但是,对于我的具体情况,我需要指定我传入的Person对象,并为其分配一个特定的MockReturnObject。比如: 或 这两种方法都不起作用,调用最终返回null而不是MockReturnObjectA(我认为这是因为它无法匹配参数)。不幸的是,我对Spock没有太多的经验,我试图搜索关于在这种情况下处理地图的文档,但没有取得

  • 我希望在Spock中使用@WithMockUser运行一个参数化测试,每个迭代都有不同的角色。 作为一个示例,下面的测试代码没有显示编译错误,并且运行两次。但是结果失败了,因为#role只在@unroll中解析,而不在@WithMockUser注释中解析。 所以我的问题是:有可能运行这样一个参数化的测试吗?

  • 我试图编写一个Spock规范,在这里我想验证一个用三个参数调用的方法。我根本不关心前两个,任何参数类型的实例都可以。我试图使用Spock通配符参数匹配,但不断遇到问题。我的验证如下所示: 这里是一个mock,UploadedPackage和PackageImportResponse.builder是预期的参数;在更改调用SaveService的代码之前,我试图先进行一个有效的测试。 我还尝试省略类

  • 我正在使用selenium Web驱动程序、testng和java构建一个测试框架。在进行框架POC时,我遇到了一个问题。我想在每个测试用例之后执行一些代码,这将删除/重置应用程序到它的基本状态。每个测试用例的清理代码可能不同。 假设我有两个名为A和B的模块。在模块A中,我有3个测试用例Test1、test2、Test3。我想对每个测试用例(Test1、Test2和Test3)运行清理。每个测试用

  • 我不明白Spock测试中Mock、Stub和Spy之间的区别,我一直在网上看的教程也没有详细解释它们。