Groovy Jasmine/斯波克中类似玩笑的描述块
使用JavaScript测试框架,如Jasmine或Jest,我可以这样组织测试:Groovy Jasmine/斯波克中类似玩笑的描述块,groovy,spock,Groovy,Spock,使用JavaScript测试框架,如Jasmine或Jest,我可以这样组织测试: describe('someFunction', () => { beforeEach(() => { // do some setup for each describe block }) describe('some scenario', () => { beforeEach(() => { // do some setup before ea
describe('someFunction', () => {
beforeEach(() => {
// do some setup for each describe block
})
describe('some scenario', () => {
beforeEach(() => {
// do some setup before each test case
})
test('some test case', () => { ... })
test('another test case', () => { ... })
})
describe('some other scenario', () => {
beforeEach(() => {
// do some setup before each test case
})
test('some test case', () => { ... })
test('another test case', () => { ... })
})
})
我想知道是否有一种方法可以使用Groovy的Spock测试框架来实现类似的描述块结构
我知道我可以拥有良好的外部结构,例如:
class SomeFunctionSpec extends Specification {
def setup() {
// do some setup before each feature method
}
void "some Function"() {
given: "some setup before this test"
// ...
when:
// ...
then:
// ...
when:
// ...
then:
// ...
}
}
我觉得有太多的when-then会让事情变得太混乱,我想在不同的特性方法中分离测试用例,但是在相同的设置场景下。这样,我不必每次都在给定的块中执行相同的操作(但也不会影响外部块,也不会创建可能会影响其他场景的数据)。如果您查看Spock文档中可以看到,设置
相当于每个之前的
。在Spock中,您不需要嵌套这些,如果您想从父级应用设置,您可以使用继承。正如您所说,在单个测试中反复使用when-then在大多数情况下都是一种代码味道。如果您有这种特殊情况,那么您可能希望结合@Shared
逐步研究@Shared
根据您的场景,您有几个选项
使用设置
方法准备公共状态
使用在给定
/设置
块中调用的帮助器方法
将1与继承一起使用可组合设置
方法
请注意,在基类中声明的测试也将在子类中执行。给定的下的任何内容:“此测试之前的一些设置”
可以转到规范本身内部的一个私有帮助器方法,然后在每个功能方法的给定:
或设置:
块中调用该方法。对于每个继承的类,我必须在设置()中调用super吗?很高兴听到这个消息!顺便问一下,第二个类应该命名为Scenario2Spec吗?:)
abstract class BaseScenarioSpec extends Specification {
def setup() {
// do some setup before each feature method
}
}
class Scenario1Spec extends BaseScenarioSpec {
def setup() {
// do some setup before each test case
}
def "some test"() {
when: //stimulus
then: //verification
}
}
class Scenario2Spec extends BaseScenarioSpec {
def setup() {
// do some setup before each test case
}
def "some other test"() {
expect:
}
}