我使用DUnit框架为我的应用程序提供了一个单元测试项目.这个项目有一个单元,$IFDEF用于在xml文件而不是gui或just命令行中输出测试结果.通过切换Build配置启用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',
...
Run Code Online (Sandbox Code Playgroud)
这非常有效.当我从IDE(一个带有'File> New> Unit' 的新单元)向该项目添加一个新单元时,问题就出现了.
测试项目现在是:
uses
TestFramework,
TextTestRunner,
Sysutils,
Forms,
GUITestRunner,
DCTDSetupTests in 'IntegrationTests\DCTDSetupTests.pas',
...
MyNewUnit in 'IntegrationTests\MyNewUnit.pas';
Run Code Online (Sandbox Code Playgroud)
如您所见,测试XML_OUTPUT已消失...每次添加单元时,Delphi IDE都会删除此测试.
你知道我为什么以及如何避免它?
您可以向主程序添加代理单元以绕过这种有问题的行为(我们许多人认为这是一个错误,而不是一个功能).
program DelphiCodeToDoc_Tests;
uses
...
XMLTestRunnerProxy,
...
Run Code Online (Sandbox Code Playgroud)
和
unit XMLTestRunnerProxy;
interface
{$IFDEF XML_OUTPUT}
uses
XmlTestRunner2 in 'DUnit_addon\XmlTestRunner2.pas';
{$ENDIF}
implementation
end.
Run Code Online (Sandbox Code Playgroud)
DPR的使用列表由IDE管理.不幸的是,你无能为力.按照官方的说法,你不应该将IFDEF放在DPR的使用列表中间,因为如果你这样做,它会做这样的事情.
我要做的是将XmlTestRunner2单元留在项目中,并将IFDEF放在单元内部,这样如果你没有设置XML_OUTPUT,它就不会编译任何东西.
只有实际使用的代码才会被编译到您的应用程序中,因此通常情况下,在Uses子句中使用未使用的单元并不会有什么坏处.
在IDE中运行程序时,可以看到链接到应用程序的所有代码.您应该在所有已编译的代码旁边看到蓝点.
需要注意的是,您应该检查所initialization关注单位的部分.初始化部分中的任何代码都是通过包含单元自动包含的,因为该部分中的任何代码都会在应用程序启动后立即运行.如果需要,您可以在单元的初始化部分中添加编译器指令,以避免链接和运行任何初始化代码.
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |