开发人员没有良好的单元测试的主要借口是“代码不是以可单元测试的方式设计的”。我试图了解无法进行单元测试的设计和代码类型。
开发人员没有良好的单元测试的主要借口是“代码不是以可单元测试的方式设计的”。我试图了解无法进行单元测试的设计和代码类型。
Answers:
有几个因素可能会使代码难以进行单元测试。在这种情况下,重构有助于改进代码以使其可测试。
一些可能很难测试的代码示例:
function pGetDp_U(int i, int i2, string sText)
。请注意,缺少清晰的体系结构不会使代码难以进行单元测试,因为单元测试只涉及代码的一小部分。不清楚的体系结构仍然会对集成和系统测试产生负面影响。
有很多事情使代码难以进行单元测试。巧合的是,其中很多也使代码难以维护:
人们不希望进行单元测试的常见代码示例:
使用模拟框架,所有这些示例都可以进行单元测试。为内部依赖项设置模拟替换只是工作。
真正无法进行单元测试的东西:
有一些地方会使编写单元测试变得更加困难。但是,我要强调的是,这并不意味着您应该简单地放弃有用的技术,因为它们可能会增加测试的复杂性。与任何编码一样,您应该进行自己的分析,以确定收益是否超过成本,而不是盲目接受网络上一些随意的家伙发布的内容。
除非您知道自己的所作所为,否则这些成本中的大多数都会失去控制。不幸的是,许多人通常不知道如何使用这些技术来减轻诸如测试复杂性之类的事情。
根本没有无法测试的代码。但是,有一些非常难于测试的代码示例(以至于可能不值得付出努力):
硬件交互-如果代码直接操纵硬件(例如,写入寄存器以移动物理设备),则对其进行单元测试可能太困难或太昂贵。如果您使用真实的硬件进行测试,则可能会很昂贵,从而无法在测试工具中获得适当的反馈(还需要更多设备!),否则,您必须模拟物理对象的确切行为-这并不是小菜一碟一些实例。
时钟交互-通常比较容易,因为几乎总是可以很简单地模拟出系统时钟功能。但是,如果您做不到,那么这些测试将变得难以管理-基于实时的测试往往需要花费很长时间才能运行,而根据我的经验,由于系统负载使事情花费的时间比应有的长,因此它们往往非常脆弱。 ,导致幻像测试失败。