关于TDD,一个函数如果需要网络访问怎么TDD?
首先把功能分成需要网络和不需要么?
然后Mock网络部分,只能测试非网络部分?
首先把功能分成需要网络和不需要么?
然后Mock网络部分,只能测试非网络部分?
应该不用分成要或不要网络. 而是要 stub 一下关键的资源. 可以是个web 服务,返回指定数据啥的. 拙见见笑.
我用过 Python 可以动态替换一些函数. 就很容易做到 Mock or Stub 测试了. 不用太费力. 目标是为了组织足够的测试用例 来确保功能是ok的. 就是一组TestCase. 测试数据 是录制和抓取的样例数据 最难的是那种不可序列化的对象 or 环境依赖. 我的方法就是数据模拟. 不可能真的去建个socket啥的. 就是模拟数据.
真的实行起来, 也挺难的, 尤其是人员比较多, 测试用例经常被破坏. 如果在原有代码里插入测试代码 更混乱. 稍微进化一些的方法是: 继承一个class 覆盖实现要模拟的函数. 装配数据就好了. 或者利用语言的特性. python可以加@decorator
有个概念是 可测试代码 和 不可测试代码。 要是想支持测试, 肯定要额外调整一些代码才可以的. 而这个调整搞不好 还会带入更多bug. 极端的人也反对做调整. 但是想想, 产品真的上线以后, 每次打一个版本, 如果没有办法快速验证所有功能,是多么可怕的事。即便事后找到谁带入了新bug 也没什么意义. 该造成问题的已经造成了。
总之, 能做到TDD的 从上到下都是很认可的才行。
举个例子.
@TestWrap
def getURL( s) :
balabala....
def TestWrap(s):
if testEnable:
return testdata.get(xxx);
return s