我应该分解实现代码之间的重复,仅用于单元测试中的重用吗?

时间:2017-03-09 15:10:44

标签: unit-testing testing

我有时会发现在单元测试和实现代码之间重复相同的代码块或相同的常量值。

为了在单元测试中重用常量,我需要使常量不是私有的。

为了重用代码块,我需要将块提取到单元测试可访问的某个位置。

我觉得这样做很不舒服,因为我正在减少封装和/或从我们的单元测试中删除代码块。

我应该将单元测试代码与实现代码相同并尝试在它们之间应用DRY原则,还是在两者之间重复?

1 个答案:

答案 0 :(得分:1)

这取决于。一般来说,如果没有看到任何代码,我会赞成重复。

一些专业人士:

  • 测试检查代码,他们有一个镜像实现,这样当代码更改时,测试保持静态,提供反馈并断言事情按照预期的方式运行。如果他们共享代码,并且测试称为共享代码,则共享代码可能会更改,隐式更改测试,这可能会导致误报
  • 在测试中使用文字有助于理解,当测试失败时,断言可以更清晰。当一个人必须最终调试时,所有与测试相关的代码都可以在测试方法的主体中,从而减少调试时间。

缺点:

  • 复制!这是主要的权衡,拥有一个没有重点的测试套件可能导致在生产代码更改时不得不更新大量测试

Jay Fields在他的着作“有效地利用单元测试”一书中描述了DAMP和文字。 https://leanpub.com/wewut

在阅读之后,体验了在支持复制(DAMP)之后需要使用多少更集中,更容易的测试,我个人默认为DAMP测试而非出现非常干燥的代码,因为他概述了许多好处这本书。