迁移遗留代码时进行单元测试
Unit testing while migrating legacy code
我们有一个旧的 C# 库需要 "cleaned",重构,基本上重做。该库没有任何相关的单元测试(也没有与此相关的文档)。
我们要确保从头开始重新制作所有内容后,保留所有功能并且不会引入错误。为此,我问你,你会如何处理这种考虑单元测试的情况。
我应该为旧项目库和新项目库创建单元测试吗?为遗留代码创建单元测试没有意义。或者是?
如果您的目标是保持现有 API 不变,并且只改进库的内部实现,则您应该使用单元测试覆盖旧库的 public API。然后你就可以安全地进行重构和改进了。
如果您的改进需要更改 public API,旧库的单元测试将无济于事 — 您应该用单元测试覆盖新的 API。
不幸的是,这取决于您打算如何重写。如果你想完全重新设计,那么为遗留代码编写单元测试或多或少将是无用的,你将无法迁移它们。单元测试与他们测试的 unit 紧密耦合。重新设计 待测单元 通常会使它们的单元测试无效。
我建议考虑为旧库编写集成测试,即验证大型进程(如果可能的话)。它们可能更容易挽救,并且应该让您确信 大局 仍然完好无损。但这可能是高度特定于领域的,即如果您正在迁移某种工具库,可能没有 广泛的图片 可供查看!
因此,遗留代码也不存在单元测试。从理论上讲,我们甚至不确定它是否没有错误。
单元测试遗留代码需要一些重构技术,这也需要您更改遗留代码。如果计划编写一个新库,对旧库进行单元测试会使工作量加倍,并且不会给您任何好的见解。
您想知道是否没有引入错误:构建新项目测试驱动。你想知道功能是否相同?最终用户验收测试,因为没有自动化的方法来验证新旧版本是否相同。
我错过了它是一个内部组件被其他组件而不是用户使用的部分。在这种情况下,您可以编写黑盒测试。这确实需要您保持 public 合同相同,但允许您识别旧项目和新项目之间的差异。
我们有一个旧的 C# 库需要 "cleaned",重构,基本上重做。该库没有任何相关的单元测试(也没有与此相关的文档)。 我们要确保从头开始重新制作所有内容后,保留所有功能并且不会引入错误。为此,我问你,你会如何处理这种考虑单元测试的情况。 我应该为旧项目库和新项目库创建单元测试吗?为遗留代码创建单元测试没有意义。或者是?
如果您的目标是保持现有 API 不变,并且只改进库的内部实现,则您应该使用单元测试覆盖旧库的 public API。然后你就可以安全地进行重构和改进了。
如果您的改进需要更改 public API,旧库的单元测试将无济于事 — 您应该用单元测试覆盖新的 API。
不幸的是,这取决于您打算如何重写。如果你想完全重新设计,那么为遗留代码编写单元测试或多或少将是无用的,你将无法迁移它们。单元测试与他们测试的 unit 紧密耦合。重新设计 待测单元 通常会使它们的单元测试无效。
我建议考虑为旧库编写集成测试,即验证大型进程(如果可能的话)。它们可能更容易挽救,并且应该让您确信 大局 仍然完好无损。但这可能是高度特定于领域的,即如果您正在迁移某种工具库,可能没有 广泛的图片 可供查看!
因此,遗留代码也不存在单元测试。从理论上讲,我们甚至不确定它是否没有错误。
单元测试遗留代码需要一些重构技术,这也需要您更改遗留代码。如果计划编写一个新库,对旧库进行单元测试会使工作量加倍,并且不会给您任何好的见解。
您想知道是否没有引入错误:构建新项目测试驱动。你想知道功能是否相同?最终用户验收测试,因为没有自动化的方法来验证新旧版本是否相同。
我错过了它是一个内部组件被其他组件而不是用户使用的部分。在这种情况下,您可以编写黑盒测试。这确实需要您保持 public 合同相同,但允许您识别旧项目和新项目之间的差异。