如何处理纠结的使用依赖关系以开始单元测试?

Esc*_*ity 6 delphi unit-testing dunit delphi-7

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

为了开始遵循本书中的建议,我创建了一个测试项目,并尝试编写一个测试.为此,我需要在测试项目中添加一些单元,但这里存在问题:被测系统具有可怕的使用依赖性.一个单位使用其他单位,使用其他单位等等,等等.似乎大多数单位直接或间接使用一个特定单位,而这个单位在其使用条款中依次有170个依赖项.还存在间接循环依赖.

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

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

Dav*_*nan 5

您的代码中将始终具有依赖项。好吧,只要您可以重复使用代码,就会有依赖关系。由于您正在测试旧系统,因此批发重组是不可能的。

因此,您只需要接受依赖关系。最方便,最实用的方法是拥有一个单元测试项目。该项目包含您的所有单元测试。使用运行程序的功能可以随时仅运行特定的测试。

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

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

有两个显而易见的解决方案:

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

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

现在,您可能还面临其他技术问题,由于我不得不稍作猜测,因此我对错误的解释可能不太正确。但最重要的是,在.dpr文件中具有相同的单位列表是解决的方法。