现在假如有功能a、b,则须为其分别编写testCase,分别记为TA、TB,然后运行、重构直至结构合理。而后又得知a、b都是c功能的子功能,那现在又得为c编写testCase,记为TC。问题来了,由于c包含a、b,则运行TC必然会调用a、b;与此同时,运行TA、TB也会调用a、b,那不就重复测试a、b了吗? 假如c又是d的子功能,a、b岂不是要被测试3次?
zavakid的思路也是对的。问题在于lz似乎找不到一个办法在测C的时候隔离A和B。
mock就是干这个的。
既然c必定包含a和b,那只需要测定c就行了,但必须确定覆盖a和b的testcase.
这个并不矛盾。
可以作局部测试,也可以作全局测试。
如果A,B是通用的组件,那么A和B就必须作测试,而且是各种分支的测试。
而在测试C的时候,只要针对C最单元测试,覆盖C的各种分支就可以了,在对C的测试中,是充分信任B提供的功能的。
这是我的理解 :)
以mock为关键字再搜搜,应该能搜到更有用的一些东西。 :)
[quote]是不是用mock的前提是代码必须严格遵守迪米特法则[/quote]
:idea: 过长的链式方法调用,setup会比较难写。mock有一个好处就是可以让你写出清晰的接口:上层只需要调用一个下层的简单接口,不需要知道下层具体的实现和结构。