第2篇, 避免在构建对象时写出不易测试的代码.
本文是第3篇, 讲述依赖项和迪米特法则.
迪米特法则 (Law of Demeter)
还是使用建造汽车的例子....真正需要的依赖项没有明确在构造函数里定义. 这里Warehouse相当于是一个容器, 测试时, 我们可能会不知道要为Warehouse里的哪个东西做测试替身....测试时需要创建返回mocks的mock对象.
测试时的设置非常麻烦.
解决办法
解决办法就是遵从迪米特法则.
只注入我们直接需要的依赖项, 直接使用它们....这样就会保证依赖项很明确, 测试的时候一眼就能看出依赖于哪些对象.
代码示例
例子一
下面这个违反了迪米特法则, 直接注入的是Warehouse, 而实际用到的却是MichelinTire:
?...这样用的话, 写测试的人可能根本无法知道需要使用容器里面的哪个对象.
你也许会说这样做灵活(我以前也经常这样做), 但是重构的时候, 这里很容易出错, 因为根本看不出来真正依赖的是哪个对象.