我有一个单元测试项目使用DUNIT框架我的应用程序。 该项目具有由$IFDEF在一个XML文件,而不是GUI或只是命令行包围,以输出测试结果的单元。 XML_OUTPUT限定通过切换构建配置启用。

program DelphiCodeToDoc_Tests;

uses
  TestFramework,
  TextTestRunner,
  Sysutils,
  Forms,
  GUITestRunner,
{$IFDEF XML_OUTPUT}
  XmlTestRunner2 in 'DUnit_addon\XmlTestRunner2.pas',
{$ENDIF}
  DCTDSetupTests in 'IntegrationTests\DCTDSetupTests.pas',
  ...

此完美。 这个问题开始的当我加入一个新的单位,以这个项目从IDE(一个新的单元“文件>新建>单位”)。

测试项目现在是:

uses
  TestFramework,
  TextTestRunner,
  Sysutils,
  Forms,
  GUITestRunner,
  DCTDSetupTests in 'IntegrationTests\DCTDSetupTests.pas',
  ...
  MyNewUnit in 'IntegrationTests\MyNewUnit.pas';

正如你看到的,测试XML_OUTPUT已经消失了......每次我加入一个单元,德尔福IDE删除此测试。

你知道为什么,我该如何避免呢?

有帮助吗?

解决方案

只有实际使用的代码被编译到应用程序中,无论如何,所以通常情况下,它不会伤害有未使用的Uses子句中的单位。

您可以看到,当您在IDE中运行该程序被链接到你的应用程序的所有代码。你应该可以看到蓝色的圆点旁边所有的编译代码。

一个需要注意的是,你应该检查是关注的单位initialization部分。任何代码,在初始化部分简单地由包括单位,因为在该节的任何代码,一旦应用程序启动时自动运行包括在内。您可以添加单元的初始化部分内部编译器指令,如果需要的话,以避免任何初始化代码从就跑被链接。

其他提示

您可以代理装置主程序绕过这个问题的行为(其中许多人认为的错误,而不是一个功能)加入。

program DelphiCodeToDoc_Tests;

uses
  ...
  XMLTestRunnerProxy,  
  ...

unit XMLTestRunnerProxy;

interface

{$IFDEF XML_OUTPUT}
uses
  XmlTestRunner2 in 'DUnit_addon\XmlTestRunner2.pas';
{$ENDIF}

implementation

end.

在DPR的用途列表由IDE管理。不幸的是,没有什么可以做这件事。据官方统计,你不应该把IFDEF的宣告在DPR的应用名单的中间,因为它会做这样的东西,如果你做的。

我做的是离开XmlTestRunner2单元项目,并把IFDEF的宣告该单元本身,以便里面,如果你没有XML_OUTPUT集,它没有做任何编译

在发生剥离的任何时间IDE有权修改DPR的用途子句。使用“另存为”重命名单位将做同样的事情。

要解决它,我总是从外部创建我的新单位作为一个空的文本文件,然后将它们手动添加到DPR。这是更多的工作开始,但你最终只包括单位,如果他们是必要的。还要注意的是,当这样做,如果你要当单位使用什么不迟于2005年德尔福可以在编辑窗格底部切换到“历史记录”选项卡,并复制“本地文件”的内容,以获取版本之前发生加入和其他一切汽提。

和是的,这是一个错误。 QC#6294 具体地说,它是开放的,所以Embarcadero公司知道这个问题。

考虑具有两个项目。一旦与可选代码,一个没有。然后建立任你挑选,或两者兼而有之。利用项目组,他们将很好地工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top