单断言VS多断言
STST
想和大家讨论一下,一个测试用例里只做一个断言
还是一个用例里做多个相关的断言
比如有一个查询函数Query(id) 返回[姓名,性别,年龄]
那么是在一个测试用例里对这三个属性进行断言好?
还是在三个测试用例里,对每个属性进行断言好?
HZ
三个检查一个用例
你是希望有10个问题每次告诉你一个人折腾10次还是一次告诉你10个折腾1次
STST
哦,但是我发现分开写,表达力更强
你说的"折腾"当然有道理,但是牺牲了表达力
STST
现在的讨论分为两派了,如果能各抒己见最好
我比较支持分开写的这一派,但是也无法反驳前面一派
CRS
你的这3个属性是由一个行为获取到的..,为嘛要写成3个...
STST我是感觉表达力会强一些
CRS
那为啥不可以把这3个验证抽成一个方法..如果有必要抽的话
STST
如果Query复杂一点,姓名,性别,年龄各自来自复杂的算法,是不是分开就更容易表达跟踪了
WL
怎么知道这三个属性无相关性,三个用例单独验证都正确不等于一次取出时全部正确吧
STST
嗯,是的,很有见解
对这个问题可以这样解释
我现在对这个说法很认同
以概念本身为单元,一个概念本身有几个属性,应该放一起断言,但是不应该同时断言几个概念
WL
同意
STST
也就是说,不能再一个测试里,断言两个概念
比如执行
Insert(...)
断言Insert的结果
Query()
断言Query的结果
因为Insert的结果和Query的结果是两个无关的概念,不应该放一个测试里断言
我是这么理解的了
WL
塞兄很擅长抽象总结,我觉得,insert和query是两个独立test,如果合起来那是另一个新的test,一般是带业务关联的,否则没必要放一起,放一起后测试方向也不一样
STST
过奖过奖,喜欢瞎掰而已
嗯,这个问题再讨论下去,又成了OOX里的原则问题了
单一职责:一个模块只做一件事
用在这里感觉也很合适:一个测试只断言一件事,为什么把Insert和Query放一个测试用例不好,就是因为一个测试断言了两件事
LF
做正确的事,而不是正确的做事
STST
嗯,而且是只作一件正确的事