【发布时间】:2021-01-09 02:13:16
【问题描述】:
在Spock testing 中,when: 和 then: block labels(标签本身,而不是代码/phases 它们分开)是绝对必要的吗?或者它们在技术上只是syntactic sugar,可以省略(同时仍然拥有/保留原本会被标签分隔的代码行)?
我不确定在省略标签时刺激/响应阶段(相对于何时/然后)是否仍然执行相同的操作?
(我很想问这个问题,为了可能节省几行代码;这可能相对微不足道,但如果有人能回答我,我很感激。我所处的环境没有阅读或编写 Spock 测试的非技术或非技术用户 - 我尊重其他上下文,其中包含标签有助于其他非技术/非技术用户的可读性;这是有道理的。)
例如(1),考虑下面的feature method:
def "a feature method with when/then labels"(){
// setup phase code
when:
// stimulus phase code
then:
// response phase code
where:
// data table
}
下面的(示例 2)编辑(上面的示例,仅删除 when/then 标签)在功能上是否仍与上面相同?
def "a feature method withOUT when/then labels"(){
// setup phase code
// stimulus phase code
// response phase code
where:
// data table
}
我至少部分地说服自己它们是等效的,我自己的测试之前/之后(类似上面的编辑)对我来说“看起来”功能相同(根据其结果) - 但是 我是当省略标签时,不确定相应的刺激/响应阶段是否仍然执行相同的操作。尽管我提到了我自己的测试的相同结果,但我不确定是否可能存在与结果本身不那么明显的差异化副作用。
如果上面的示例 2 构成其 where 块之上的所有内容,我不会感到惊讶,都在其 implicit given block 中。但即使是这样,我也不确定这是否会有所不同,因为这两个示例在功能上是否相同。
这里有一些when/then block pair 事实(供其他人参考):
- 如果您编写其中一个 {when, then} 标签,您必须编写另一个 - 它们始终以 [相邻] 对存在。不能只写
when:或只写then:(对于给定的一对刺激/响应阶段) - 同一特征方法中的多个 when/then 块对非常好
- 特征方法必须始终至少有 1 个标记块(根据这一点,我认为哪一个都没有关系)
【问题讨论】:
标签: unit-testing groovy syntax spock