在setup方法中访问spockframework数据变量

时间:2017-02-25 12:57:10

标签: unit-testing integration-testing spock

我是一个数据驱动的测试:

def "#testDB : create customer using the caller interface"(){
    given:
        TestUtils.install(testDB)
        caller = new Caller(testDB.dbInterface.dataSource())

        def firstName = "Abdullah"
        def lastName = "Mohammad"

    when:
        def custId = caller.call("create_customer", params(of(firstName, VARCHAR), of(lastName, VARCHAR)),
            paramTypes(INTEGER), {it.getInt(1)});
    then:
        custId == custIdFromDb
    cleanup:
        TestUtils.rollback(testDB)
    where:
        testDB << testDBs
        custIdFromDb << [0, 1]
}

是否可以将给定块中的前两行分隔为setup()

TestUtils.install(testDB)
caller = new Caller(testDB.dbInterface.dataSource())

和清理块进入cleanup方法?

完整的测试用例可以found at gihub

1 个答案:

答案 0 :(得分:1)

不,因为您在where:块中定义的内容仅在相应的要素方法中本地可用,因此要在方法内部进行管理。因此,初始化很好地保留在given:部分(或setup:,这只是一个别名)和cleanup:部分内的清理。

然而,对于规范类中的每个单一要素方法,都会执行setup()cleanup()方法,即那些只应用于所有要素方法通用的数据,并且每次都需要初始化与@Shared变量相比,执行了一项功能,而setupSpec()变量将在<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="author" content="name"> <title>~name@inferno</title> <link href="favicon.ico" rel="icon"> <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> <style type="text/css"> body { background: url(x.jpg) no-repeat; background-size: cover; background-color: #0A0F14; -moz-appearance: none; } td { transition: all 2s ease 0.9s; color: inherit; -moz-appearance: none; } a:link { color: inherit; text-decoration: none; } a:visited { color: inherit; text-decoration: none; } a:hover { color: inherit; text-decoration: none; } a:active { color: inherit; text-decoration: none; } a { font-family: "Segoe UI"; font-size: 12px; font-weight: bold; outline: none; float: right; margin-right: 15px; margin-top: -3px; } td:hover{ background: rgba(16, 21, 27, 0); } .box { background: #10151B; border-radius: 0px 0px 15px 10px; line-height: 50px; width: 140px; height: 592px; position: fixed; top: 1px; bottom: 0px; left: 0px; } .icon { color: #D12248; float: left; margin-top: 10px; text-indent: 5px; } .icon2 { color: #D19011; float: left; margin-top: 10px; text-indent: 5px; } .icon3 { color: #57A3D1; float: left; margin-top: 10px; text-indent: 5px; } .icon4 { color: #AAD130; float: left; margin-top: 10px; text-indent: 5px; } .icon5 { color: #4ED1B3; float: left; margin-top: 10px; text-indent: 5px; } .icon6 { color: #98D1CE; float: left; margin-top: 10px; text-indent: 5px; } 初始化。