使用Jasmine或 Jest 等JavaScript测试框架,我可以组织测试:
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 测试框架来实现类似的describe-block结构?
我知道我的外部结构可以很好,因此:
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:
// ...
}
}
我觉得有太多时间 - 然后让事情太混乱,并且想要在不同的功能方法中分离测试用例,但是在相同的设置方案下。这样,我不必每次都在给定的块中做同样的事情(但也不会影响外部块,而不会创建可能影响其他场景的数据)。
答案 0 :(得分:1)
如果您查看Spock文档中的Fixture Methods,您可以看到,setup
相当于beforeEach
。你在Spock中没有做的就是嵌套这些,你可以使用继承,如果你想从父应用中setup
。正如你所说的那样,在一次测试中反复使用,然后在大多数情况下使用代码气味。如果您有这种特殊情况,那么您可能希望与@Stepwise
一起调查@Shared
。
根据您的情况,您有多种选择。
setup
方法准备公共状态given
/ setup
块setup
种方法
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:
}
}
请注意,在基类中声明的测试也将在子类中执行。