在Brownfield应用程序中实施单元测试的首要任务是什么?
我们是否首先重构SQL?建筑?还是你的代码库?
我们会更改语言吗?我们丢掉所有东西并从头开始吗? [不重构]
解决方案
回答
这确实取决于代码库的状态...是否有大量类?一类的大方法?这些课程紧密结合吗?配置是负担吗?
考虑到这一点,我建议阅读"有效使用旧版代码",找出问题并应用建议。
回答
我正在将单元测试添加到大型的旧式意大利面条代码库中。
我的方法是,当被要求解决问题时,我尝试围绕与当前任务相关的部分代码库创建一个新包装器。这个新的包装器是使用TTD开发的(首先编写测试)。有时会调用未经单元测试的旧代码。在其他时候,我会为现有模块制作一个新副本,并开始对其进行严重的破坏。有时我会从头开始重写功能。
但是,由于我对其进行了充分的测试,因此我感到可以控制。
我发现此代码库是经过大量复制和粘贴而开发的,一旦我理解了某个特定部分,并从中提取了一些功能(首先进行测试),这些...函数通常在许多其他地方都可用,因此用我自己的,经过单元测试的库替换遗留代码的比率增加了。
我没有(也没有权限)尝试将重写或者添加测试到我当前问题(通常是我要修复的错误)未涉及的部分代码中,但是我确实具有相当积极的主动态度触及任何可能相关的事物。
更新:Penguinix问:"我们使用哪种语言?我们建议使用特定的测试工具吗?"
现在我在……呃……腮腺炎!但是,同样的原理在任何地方都适用。
MinUnit改变了我对UT的理解:http://www.jera.com/techinfo/jtns/jtn002.html
当我看到MinUnit时,这对我来说是一个"禅"的时刻。它消除了我对单元测试的误解,因为单元测试是一个复杂的事情,需要复杂的OO框架等。我了解到UT只是在编写大量测试。我们可以在3分钟内用自己喜欢的任何一种语言来编写自己的"线束"。只是去做吧。