首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对现有代码实现TDD

对现有代码实现TDD
EN

Software Engineering用户
提问于 2014-04-21 04:28:30
回答 4查看 4K关注 0票数 3

我刚刚学习了单元测试,我试图理解如何将它与现有代码结合到一个项目中。假设我想为该项目中的特定类编写测试,但该类需要另一个类的实例才能运行和/或测试方法。我该怎么处理这个?

EN

回答 4

Software Engineering用户

发布于 2014-04-21 08:35:58

如果代码已经在生产中,并且没有对其进行测试,那么根据定义,您不能对它执行TDD。在这一点上,您至少有以下几种选择:

  1. 丢弃代码并使用TDD重新启动。这显然是很费时的,但从以前的经验来看,它通常比其他选择要快得多。
  2. 只需对任何新代码使用TDD即可。这使得旧代码变成了一个腐朽的核心,一个最终没有人敢改变的黑匣子,它可能会在整个项目的生命周期中拖垮其余代码的性能、稳定性和安全性。
  3. 递增地向现有代码添加测试,并对任何新代码使用TDD。令人惊讶的是,在我的经验中,这似乎没有多大帮助。除非代码被重构(参见下一点),否则它最终仍将成为一个黑匣子。
  4. 对任何新代码使用TDD,只要您需要触摸其中的任何代码,就用TDD代码替换旧代码的位。如果替代方案1不会发生,这至少会给你一些机会,使你的项目不会在剩下的时间被拴在泥球上。但是,您可能会发现,从未经测试的遗留代码中提取一部分可能会完全分解它,所有重构的共同努力可能比重新实现花费同样多或更多的时间。
票数 6
EN

Software Engineering用户

发布于 2014-04-21 05:54:59

这是一个非常复杂的问题,在设计时不考虑可测试性的遗留系统中,可能存在大量的耦合,这种耦合使得隔离测试(单元测试)更加困难。

如果您问了一个具体的问题、代码和具体的情况,我可以给出具体的答案,但是如果您请求一般的建议,我能做的最好的事情就是向您推荐一本出色的书“michael有效地使用遗留代码(http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052)”。

票数 4
EN

Software Engineering用户

发布于 2014-04-21 06:03:50

这并不总是容易的,有时您只需要务实地使用集成测试或端到端测试,直到您有了可测试的重构代码。

也许尝试重构类以使用接口而不是具体的类,并在构造过程中注入实现。然后使用模拟框架或滚动您自己的模拟类,并在测试期间将其注入其中。

一些模拟框架能够模拟具体的类,但它取决于语言。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/236492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档