Answers:
任何单元测试总比没有好。因此,这不是一个全有或全无的交易。
在您的情况下,由于测试驱动开发不是常态-您会想知道测试有什么用。
您想要确保将来编写的任何代码都不会破坏任何(当前)功能 -这就是子案例派上用场的地方。如果编写良好的测试通过,则您很可能没有损坏任何东西。接下来的开发人员将感谢您的测试和文档。
首先,如果您有一个分层良好的分层体系结构,请选择数据访问层并向上(朝着UI层)进行测试。如果项目具有域模型,则其最可能成为TDD的候选人,因为它可能具有大多数逻辑。如果服务(或业务逻辑)层只是在调用域/数据访问层,则没有必要以TDD方式进行服务层。这些是蓬松的测试,没有太大的价值。
添加到诸如Emma之类的代码覆盖率工具中,您可以稳定地监视总体测试覆盖率的提高。
我在一个非常大的代码库上工作,起初没有单元测试。通过遵循一些实践,我们现在(几年后)已使测试涵盖了大部分代码库。
所有新代码都必须具有单元测试。
所有更改的代码都必须添加了单元测试。
我们在不破坏旧代码的情况下安全地添加测试的方法主要是使用以下基本方法:
选择一小段您需要更改其功能的代码。
介绍您需要的接口,以便能够测试您正在更改的代码。使用重构技巧(由您具有很高置信度的很小的更改序列组成)是正确的。尽可能尝试使用工具支持。例如,可以通过将要更改的方法移动/提取到其自己的对象上来执行此操作。定期检查您的更改,以便还原。定期查看修订控制历史记录,以同行评审您如何进行更改。
尽量减少所需的更改,以打破妨碍您添加测试的依赖关系。
我们发现这样做越多,越容易实现。每次您回到代码库时,它都会好一点。
我们已经看到,通过我们的质量检查测试人员的错误数量已大大减少。由于功能回归现在几乎是闻所未闻的,因此我认为值得我们付出努力。
如果旧的东西已经工作了好多年,那么现在就不必强制创建单元测试,除非您更改旧的东西。无论如何,为新零件编写单元测试并不是毫无意义的。新零件是最有可能包含错误的零件,也是最有可能更改或重构的零件。
您可以开始介绍当前代码,如果有时间可以使用,请开始介绍旧代码的核心功能。您也可以要求PM额外的时间=)