迁移遗留代码时进行单元测试

时间:2015-01-13 09:31:26

标签: c# unit-testing

我们有一个旧的C#库,需要清理",重构,基本上重做。该库没有任何关联的单元测试(并且没有相关的文档)。 我们希望确保从头开始重新制作所有功能后,所有功能都会保留,并且不会引入任何错误。为此,我问你,你如何处理这样的情况,考虑单元测试。 我应该为旧项目库和新项目库创建单元测试吗?在为遗留代码创建单元测试方面毫无意义。或者是吗?

3 个答案:

答案 0 :(得分:1)

这不幸地取决于你打算如何重写。如果您想完全重新设计,那么为遗留代码编写单元测试将或多或少无用,并且您无法迁移它们。单元测试与他们测试的单元紧密耦合。重新设计受测试单元通常会使其单元测试无效。

我建议考虑为旧库编写集成测试,即验证大型进程(如果可能的话)。它们可能更可挽救,并且应该让您确信广泛的图片仍然完好无损。但这可能是针对特定领域的,即如果您正在迁移各种工具库,则可能无法查看广泛的图片

答案 1 :(得分:1)

因此,遗留代码也不存在单元测试。从理论上讲,我们甚至不确定它是无错误的。

单元测试遗留代码需要一些重新分解技术,这些技术还需要您更改遗留代码。如果计划是要编写一个新的库,那么对旧库进行单元测试会使工作量增加一倍,并且不会给你任何好的见解。

您想知道是否没有引入错误:构建新项目测试驱动。您想知道功能是否相同?最终用户验收测试,因为没有自动的方法来验证新旧的行为是否相同。

我错过了它是由其他组件而不是用户使用的内部组件的部分。在这种情况下,您可以编写黑盒测试。这确实要求您保持公共合同相同,但是允许您识别旧项目和新项目之间的差异。

答案 2 :(得分:0)

如果您的目标是保持现有API不变并且仅改进库的内部实现,则应使用单元测试覆盖旧库的公共API。然后,您可以安全地进行重构和改进。

如果您的改进需要更改公共API,那么旧库的单元测试将无济于事 - 您应该使用单元测试来覆盖新的API。