契约测试到底是什么? 和接口测试有什么区别?
目录
本文, 我们分三段来解析一下契约测试
- 用一个"二狗、全蛋和J100无人机"的故事接地气的讲解契约的概念
- 从故事解析里挖掘契约测试的重点
- 代码实操演示
1. 二狗、全蛋和J100无人机
二狗是富西村的一个远近闻名的木匠, 最擅长做木制无人机, 据说能飞到2万英尺高;
全蛋是张家村的模具厂厂长, 人送外号"铁皮大王", 啥模子都能给你做出来, 听说厂子都要上市了.
有一天, 二狗的无人机不小心被大雁撞了, 木头碎了一地, 他想: 我的无人机好就好在质量不重, 但刚性差, 得想想办法改良改良. 这时他猛拍了下脑门: “铁皮大王不就在隔壁村嘛”! 于是立马去张家村找全蛋, 两人这就聊了起来:
全蛋: "你需要多长的铁皮? 宽度是多少?"
二狗: "长1.5米, 宽0.9米".
全蛋: "需要加厚吗?"
二狗: "要加厚, 4层1mm厚的铁皮就可以了, 先来5套试试效果."
全蛋: "好, 先按这个规格设计5套, 我们签个简单的协议先, 保证在30天后交付给你."
协议名称叫做《J100无人机的强化计划》, 签完二狗就回家了, 继续研究他的鸭翼气动结构.
次日, 二狗突然想到一个问题: 如果我的木材和定制的钢化外壳安装不完美怎么办? 要是出个误差啊啥的,两边不就白做了吗?
不行,风险太大, 得想想办法.
这时, 二狗想到富西村另一个人计算机高手-小美, 据说她会用计算机做三维模型, 还有个能把桌子椅子啥的扫到电脑里去的3D扫描仪,
二狗马上请到了小美帮忙.
只花了1小时, 小美就把二狗的第一台J100扫到了电脑里, 然后按照《J100无人机的强化计划》里提到的规格设计起钢化外壳, 一开始发现J100原型肚子太大了,跟当初规划好的钢化外壳匹配度只有98%,显然, 二狗要改一下原型了
5小时候, 最新的J100原型和钢化外壳匹配度达到100%, 一个强化版J100像是要从屏幕上飞出来~
全蛋: "小美你真厉害, 不愧是计算机高材生呀! "
小美: “没有没有,能帮上忙我就很开心, 对了, 虽然我做完了钢化外壳模型, 但是不能保证跟铁皮大王做的完全一致哦”
全蛋: “嗯! 有道理, 那怎么办呢?”
小美: "要不这样吧, 我把你的飞机原型的模型文件发给铁皮大王, 让他照着做适配不就可以了吗? "
全蛋: “对哦, 这样我们虽然短时间内做不了拼装测试, 但是最终的零件肯定不会有太大误差了~”
小美把飞机原型的模型文件发到了全蛋, 全蛋按这个文件做了适配.
30天一晃就过了, 二狗和全蛋合作的J100加强版首次试飞成功~
2. 故事解析
在上面这个故事里,我们看到一个很重要的中间人角色-小美
,
她不仅保证二狗的原型完全能匹配《J100无人机的强化计划》里的钢化外壳数据, 还保证了全蛋在车间生产实体钢化外壳之前, 校准了各项参数, 使30天后组装一气呵成, 没有半分误差.
没错, 小美所代表的就是-----"契约"
- 如果二狗的
[原型机]
一开始就无法匹配[长1.5米, 宽0.9米, 4层1mm厚铁皮]
的规格, 那30天后肯定无法跟钢化外壳正常组装. - 如果全蛋生产的
[钢化外壳]
数据有误差, 跟当时约定的[长1.5米, 宽0.9米, 4层1mm厚铁皮]
不是100%吻合, 也肯定会造成组装失败. - 一旦形成了一份完善的契约, 就能保证客户和厂家在实际对接之前, 规避掉全部错误.
提炼:
从接口测试
的: A对C做规定的动作, C做出规定的响应
演变成契约测试
: A和C将 [规定的动作 + 规定的响应] 形成一个契约 交给"中间人B", 由B按照契约数据来对齐检验A的动作、再验证C的结果,使得AC互相绑定
3. 代码演示
//TODO
契约测试只关注约定的动作跟结果, 只要动作或结果任何一个出错, 都会造成契约测试失败