您在问两种不同事物的利弊(骑马与骑摩托车的利弊是什么?)
当然,两者都是“自动测试”(~riding),但这并不意味着它们是替代品(你不会骑马数百英里,也不会在封闭车辆的泥泞中骑摩托车地方)
单元测试测试代码的最小单元,通常是一个方法。每个单元测试都与它正在测试的方法密切相关,如果它写得很好,它(几乎)只与它相关。
它们非常适合指导新代码的设计和现有代码的重构。在系统准备好进行集成测试之前,它们很适合发现问题。请注意,我写了指南,所有的测试驱动开发都是关于这个词的。
进行手动单元测试没有任何意义。
重构呢?这似乎是您主要关心的问题?如果你只是重构一个方法的实现(内容),而不是它的存在或“外部行为”,那么单元测试仍然是有效的并且非常有用(在你尝试之前你无法想象有多大用处)。
如果您正在更积极地重构,改变方法的存在或行为,那么是的,您需要为每个新方法编写一个新的单元测试,并可能丢弃旧的。但是编写单元测试,特别是如果你在代码本身之前编写它,将有助于阐明设计(即方法应该做什么,不应该做什么),而不会被实现细节(即方法应该如何做它需要做的事情)。
自动化集成测试测试代码的最大单元,通常是整个应用程序。
它们非常适合测试您不想手动测试的用例。但是您也可以进行手动集成测试,它们同样有效(只是不太方便)。
今天开始一个新项目,没有单元测试没有任何意义,但我想说,对于像你这样的现有项目,为你已经拥有的所有东西编写它们并没有多大意义,而且它正在工作。
在你的情况下,我宁愿使用“中间立场”的方法写作:
- 较小的集成测试,仅测试您要重构的部分。如果您要重构整个事情,那么您可以使用您当前的集成测试,但是如果您只是重构 - 比如说 - XML 生成,那么要求数据库的存在没有任何意义,所以我会写一个简单而小型的 XML 集成测试。
- 一堆你要写的新代码的单元测试。正如我在上面已经写过的,一旦你“弄乱了中间的任何东西”,单元测试就会准备好,确保你的“乱七八糟”在某个地方。
实际上,您的集成测试只会确保您的“混乱”不起作用(因为一开始它不会起作用,对吗?)但它不会给您任何线索
- 为什么它不工作
- 如果您对“混乱”的调试确实在修复某些问题
- 如果您对“混乱”的调试正在破坏其他东西
如果整个更改成功,集成测试只会在最后给出确认(答案将很长一段时间都是“否”)。在重构过程中,集成测试不会给您任何帮助,这会使重构变得更加困难并且可能令人沮丧。您需要为此进行单元测试。