Grails-spock:将设置方法作为常规方法

时间:2014-09-24 12:33:35

标签: grails spock

我正在尝试为我的一个grails服务方法编写单元,单元测试就像

@Shared instance1, instance2, instance3
class testClass extends Specification {
def setup() {
   // initaiting some value here
   instance1 = new Initate(one:"one")
   instance2 = new Initate(one:"one")
   instance3 = new Initate(one:"one")
}

def "testmethodcall"() {
       //testsetup()

       when:
       def result = someMethod(value1) // Here is the error

       then:
          result==value2
       where:
       value      | value1      |   value2
       instance1  | instance2   | instance3

    }
}

出于某种原因,我们计划将此安装方法中的代码移动到另一个方法并计划调用它所需的位置,例如

@Shared instance1, instance2, instance3

class testClass {
def testsetup() {
   // initialize the code what we initialize in setup
   // initaiting some value here
   instance1 = new Initate(one:"one")
   instance2 = new Initate(one:"one")
   instance3 = new Initate(one:"one")
}


def "testmethodcall"() {
       testsetup()

       when:
       def result = someMethod(value1) // Here is the error

       then:
          result==value2

       where:
       value      | value1      |   value2
       instance1  | instance2   | instance3

    }
}

截至目前一切正常,方法调用工作正常,甚至变量已初始化,但是当我尝试使用数据列值时,它返回空值,但是当我更改为setup()方法时我得到了真正的价值观。有人可以解释我吗?如何才能将setUp方法更改为normal method

1 个答案:

答案 0 :(得分:0)

有几点需要注意: -

  1. setup() - 用于运行每个测试用例
  2. setupSpec() - 用于为测试类/单元运行一次
  3. shared - 在整个过程中都是可见的。因此必须初始化一次,因此必须在setupSpec中处理,而不是在设置中。
  4. cleanup() - 与每个测试用例一起运行
  5. cleanupSpec - 在所有测试用例运行后,在最后运行。
  6. 只能从where:block。
  7. 中访问@Shared和静态变量
  8. 双管道预期的分开输入和输出||
  9. 除了这一点,在你的代码中testmethodcall方法有语法错误。

    1. 没有比较
    2. 期待:缺少
    3. 为什么def值存在,而我们使用数据表变量是自动声明的 此外,value2不用于
    4. 此外,您声明在setup()方法存在时,您可以使用上面的代码成功运行测试用例,它只是默默地传递而不会失败,因为值和value1都为null。

      以下是代码的修改版本


      def "test methodcall"(){
       setup()
              expect:
              value == someMethod(value1) // Here is the error
      
              println '----instance1----'+value
              println '----instance2----'+value1
              println '----instance1----'+instance1
              println '----instance2----'+instance2
      //        instance1 == instance2
              where:
              value      | value1
              instance1  | instance2
          }
      

      现在看看println输出,你会明白这个问题。希望你能得到答案。