在构造函数(或者更大一点, 指构建的过程)里, 做这些额外的工作会让测试变得异常困难. 这是因为像初始化依赖项, 调用服务, 设置状态的逻辑等这些工作会把用于测试的"缝"弄丢....导致无法进行mock.
总之在构造的过程中做太多的工作会妨碍测试.
危险信号
在构造函数/字段声明里出现new关键字
如果构造函数里需要创建依赖, 那么这就会为该类与依赖项之间创造了紧耦合....这是不对的, 构建的过程中直接new的话, 就会造成紧耦合, 也无法在测试中使用Test Double来代替它们了. 如果测试中不代替它们的话, 有些服务的开销可能会很大....尽量要避免全局变量, 它无法进行隔离, 测试会遇到麻烦, 例如并行测试时其中一个测试改变了静态变量的值就可能导致另一个测试失败....例子就举这些, 并不全, 详细请看Angular作者的博文.
测试/运行时如何建立对象
上面例子里的UserController就是我们需要使用的对象, 在运行时, 代码可能是这样的:
?