SOLID和单元测试。使用语言提供的方法/类
所以我读过关于这个东西叫SOLID(混合)Writing Testable Code。然后具体关于D部分。一个人如何使用语言库提供的原始类型或方法/类时,请遵循以下原则。SOLID和单元测试。使用语言提供的方法/类
一个是否还需要使用依赖注入的说,一个FileWriter阵列(爪哇(new int[64]
)或类成员?做这些需要使用DI注入或可以在类实例化还是他们?
你应该走多远以上的指导方针?
我不是在寻找一个特定于语言的答案(如果可能的话)。恕我直言,答案应该适用于,例如PHP,Python Java,甚至C
您通常不会注入基元或类似对象。原因是那些有:
- 简单的价值持有人没有太多的业务/域逻辑关联
- 轻松存根无需任何额外的工具(创建测试假数据阵列是没有问题的)
FileWriter
是不同的,因为它与上面的点完全相反。我不能简单地将其存储在测试中,并使其工作不会很少strong假设 - 就像我假设每个将来运行此代码的开发人员都将在其计算机上具有某个文件。这通常是不走单元测试和为什么DI是在这些情况下应用的原因之一。
这些问题来自FileWriter
作为通信点这两个不相关的组件 - 您的应用程序和文件系统。任何类在大多数情况下,做这种整合(您的应用程序和数据库/网络/文件/ REST之间等)应被抽象和注射。
注射阵列过度杀伤。作家是绝对必须的。实际上注入作者是不够的。文件编写者与外部世界大量交互,你不需要这些。文件编写器应该被封装在自己的类中,并且不会被直接调用。
相反,注入一个FileWriterWrapper的接口。因此,依赖性得到了控制。此外,单元测试中的文件交互是一大痛苦。不惜任何代价避免它。数据库交互也是如此。其实与外界的所有交互应存根/单元测试嘲笑。
美丽的是,SOLID设计和可测性齐头并进。好的设计意味着可测试的代码。如果你发现很难测试一些代码,它通常表明有在你的设计中的缺陷。