6

我有一个凌乱的 Delphi 7 遗留系统需要维护和开发。我已经在阅读“有效地使用遗留代码”,我非常喜欢这本书。

为了开始遵循书中的建议,我创建了一个测试项目并尝试编写一个测试。为此,我需要在测试项目中添加一些单元,但问题在于:被测系统具有可怕的使用依赖项。一个单元使用其他单元,该单元使用其他单元,依此类推。似乎大多数单元直接或间接使用一个特定单元,而该单元在其使用子句中又具有 170 个依赖项。也有间接的循环依赖。

目前我正在尝试将所有遗留系统的单元添加到测试项目中,但我遇到了各种各样的问题,比如“单元 xxx 是用不同版本的 xxx 编译的”等等。

所以我想知道我是否做错了什么。我以前使用过单元测试,但在我自己的项目中,它更小,结构和模块化更好。在这种情况下我有什么选择?我错过了什么吗?

4

1 回答 1

5

您的代码中将始终存在依赖项。好吧,只要你有代码重用,你就会有依赖。由于您正在测试遗留系统,因此不可能进行大规模重组。

所以你只需要接受依赖。最方便实用的方法是拥有一个单一的单元测试项目。该项目包含您所有的单元测试。使用运行程序的功能在任何时候只运行特定的测试。

这会导致您的项目在其 .dpr 文件中具有与主项目相同的单元列表。这就是您目前尝试的方法,这是正确的方法。

您的问题听起来像是在主项目和单元测试项目之间共享 DCU 目录(单元输出目录)。对于这两个项目,您有不同的编译器选项。这是您报告的错误最可能的解释。

有几个明显的解决方案:

  1. 对齐两个项目的编译器选项。然后他们可以共享 DCU。
  2. 为两个项目提供单独的 DCU 目录。

选项 2 更加稳健,是最佳实践。但是,您应该尝试了解编译器选项不同的原因。很有可能您需要更改新单元测试项目中的编译器选项,以便被测单元按需要编译和运行。在现代 Delphi 中,我会使用选项集来确保编译器选项的一致性。

现在,您可能面临其他技术问题,我对错误的解释可能不太正确,因为我不得不猜测一下。但最重要的是,在您的 .dpr 文件中拥有相同的单位列表是可行的方法。

于 2012-08-21T12:17:37.180 回答