Coding Dojo要输出什么?
Coding Dojo不是以完成题目要求的所有代码为目的,而是以练习编程为目的。就像一个篮球运动员,在平时训练的时候,不以相互对抗,投篮得分为目的,而是练习基础的投篮姿势,投篮角度,做各种运动增强体能。做为程序员,Coding Dojo是我们进行基础训练的场合,我们要训练给变量和函数起一个准确的名字,让函数尽量短小,让程序更加优雅等等。

关于Given_When_Then的case命名法
我们经常困惑Given和When后面应该写哪些内容,有的时候把两个内容调换一下似乎也讲得通。
以Game of life为例:
Given_活着的邻居数量为3_When_目标细胞活着_Then_下一轮目标细胞活着
VS
Given_目标细胞活着_When_活着的邻居数量为3_Then_下一轮目标细胞活着
本次Coding Dojo时,两种命名方式都有人用到。那一种方式更符合逻辑呢?
做一个类比:
Given_太平盛世_When_一个人职业是诗人_Then_这个人生活富足(李白)
Given_兵马乱世_When_一个人职业是诗人_Then_这个人饿死(杜甫)
VS
Given_一个人职业是诗人_When_太平盛世_Then_这个人生活富足
Given_一个人职业是诗人_When_兵马乱世_Then_这个人饿死
很明显,对于一个人,他可以选择职业,但是不能选择社会状态,因此第二种命令方法好,即一个人的职业是Given, 他所处的社会状态是When。
回到Game of life的例子,一个细胞的状态应该是Given,它所处的邻居状态是When。
正确的命名法:
Given_目标细胞活着_When_活着的邻居数量为3_Then_下一轮目标细胞活着
Given_目标细胞活着_When_活着的邻居数量为1_Then_下一轮目标细胞死掉
Given_目标细胞活着_When_活着的邻居数量为4_Then_下一轮目标细胞死掉
Given_目标细胞死着_When_活着的邻居数量为3_Then_下一轮目标细胞复活
之所以选择诗人作为类比,是因为笔者在陪娃背古诗的时候想到了该应如何使用Given_When_Then命名法。百度了一下”杜甫很忙“的梗,发现网友超级有想象力,感兴趣的人可以自行搜索。

感谢丁克同学给文章提了意见,从理论角度阐述了given_when_then命名法:
· Given 一个上下文,指定测试预设
· When 进行一系列操作,即所要执行的操作(一般写成动宾格式短语)
· Then 得到一系列可观察的后果,即需要检测的断言
关于Given when then命名法:
这里要看你的测试对象是什么,这个很关键,不然Given和when后很可能混淆
比如:
测试对象是人
Given:人的上下文预设:这是一个诗人
When:对人的操作:把这个人放在太平盛世中
Then:对人产生的结果:这个人将获得富足的生活
Given_一个人职业是诗人_When_活在太平盛世_Then_这个人生活富足
测试对象是世道
Given:世道的上下文预设:这是一个太平盛世的世道
When:对世道的操作:在太平盛世中放入一个诗人
Then:对世道产生的结果:这个世道将有 更多绚丽的诗歌
Given_太平盛世_When_一个人职业是诗人_Then_这个人生活富足(李白) 【混淆了】
对于Game of life题目,测试对象是细胞:
Given_目标细胞活着_When_活着的邻居数量为3_Then_下一轮目标细胞活着
网友评论