C# 迁移遗留代码时的单元测试

C# 迁移遗留代码时的单元测试,c#,unit-testing,C#,Unit Testing,我们有一个旧的C#库,需要“清理”,重构,基本上重做。这个库没有任何相关的单元测试(也没有相关的文档)。 我们想确保,在从头开始重新制作所有内容之后,所有功能都得到保留,没有引入任何bug。为此,我问你们,你们将如何处理这样的情况,考虑单元测试。 我应该为旧项目库和新项目库创建单元测试吗?为遗留代码创建单元测试毫无意义。或者是吗?如果您的目标是保持现有API不变,只改进库的内部实现,那么您应该使用单元测试覆盖旧库的公共API。然后您就可以安全地进行重构和改进了 如果您的改进需要更改公共API,那

我们有一个旧的C#库,需要“清理”,重构,基本上重做。这个库没有任何相关的单元测试(也没有相关的文档)。 我们想确保,在从头开始重新制作所有内容之后,所有功能都得到保留,没有引入任何bug。为此,我问你们,你们将如何处理这样的情况,考虑单元测试。
我应该为旧项目库和新项目库创建单元测试吗?为遗留代码创建单元测试毫无意义。或者是吗?

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


如果您的改进需要更改公共API,那么旧库的单元测试将不会有帮助-您应该用单元测试覆盖新API。

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


我建议考虑为旧库编写集成测试,即验证大型流程(如果可能的话)。它们可能更容易抢救,并且应该给你一种保证感,即总体情况仍然完好无损。但这可能是高度特定于领域的,也就是说,如果您正在迁移某种工具库,那么可能没有一个大致的图景可以看

因此,遗留代码也不存在单元测试。理论上,我们甚至不确定它是否没有bug

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

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


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

您是否计划从头开始编写整个项目?这个项目有多大?它没有那么复杂,有6个类:大多数是+/-100行,一个是+/-1100行。这个问题可能更适合于,但是基本上相同的黑盒测试应该用于新项目和旧项目。