我目前正在尝试为2个不同的类运行相同的测试用例但是遇到setup()的问题,我看到类似的问题,但是还没有看到使用Spock进行常规测试的解决方案,而我还没有能够搞清楚。
所以我基本上使用2种不同的方法来解决同样的问题,所以相同的测试用例应该适用于这两个类,我试图保持不要重复自己(DRY)。
所以我将MainTest设置为抽象类,将MethodOneTest和MethodTwoTest设置为扩展抽象MainTest的具体类:
import spock.lang.Specification
abstract class MainTest extends Specification {
private def controller
def setup() {
// controller = i_dont_know..
}
def "test canary"() {
expect:
true
}
// more tests
}
我的具体课程是这样的:
class MethodOneTest extends MainTest {
def setup() {
def controller = new MethodOneTest()
}
}
class MethodTwoTest extends MainTest {
def setup() {
def controller = new MethoTwoTest()
}
}
所以有人知道如何从我的具体类MethodOneTest和MethodTwoTest中抽象MainTest中运行所有测试吗?如何正确实例化设置?我希望我很清楚。
答案 0 :(得分:2)
忘记控制器设置。当您执行具体类的测试时,将自动执行来自超类的所有测试。 E.g。
import spock.lang.Specification
abstract class MainTest extends Specification {
def "test canary"() {
expect:
true
}
// more tests
}
class MethodOneTest extends MainTest {
// more tests
}
class MethodTwoTest extends MainTest {
// more tests
}
但它应该不止一次地运行相同的测试。因此,用某些东西对它们进行参数化是合理的,例如:一些类实例:
import spock.lang.Specification
abstract class MainSpecification extends Specification {
@Shared
protected Controller controller
def "test canary"() {
expect:
// do something with controller
}
// more tests
}
class MethodOneSpec extends MainSpecification {
def setupSpec() {
controller = //... first instance
}
// more tests
}
class MethodTwoSpec extends MainSpecification {
def setupSpec() {
controller = //... second instance
}
// more tests
}