- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我们主项目的所有单元测试构建一个专用项目,因为将它们包含在主项目中会给已经庞大的代码库带来压力。现在,主项目的所有单元及其位置都在项目的 dpr 文件中引用。当我为类编写测试用例时,我只需从主项目的 dpr 复制类单元引用(以及引用的单元单元引用)并将其粘贴到单元测试项目中。
这意味着最终我将得到一个 dpr 文件,其中逐字包含所有主项目 dpr 文件单元引用,当主项目 dpr 更改时,该文件将很难维护。我们这里谈论的是数千个单位。
我的问题是,我可以以某种方式将一个项目的所有单元引用包含在另一个项目中吗?仅仅让主项目在一个目录中编译其 dcus 并将其包含在单元测试项目 dcu 搜索路径中是不够的,因为这些单元具有必须执行的初始化例程。
最佳答案
我要实现这一点的方法是创建一个程序来获取现有的 DPR 文件并生成一个包含文件,然后我将在测试应用程序中使用该包含文件。您可能可以使用 tStringlist 完成大部分工作。该项目将在构建测试用例之前运行。
var
OrigDpr : tStringlist;
begin
OrigDpr := tSTringlist.create;
OrigDpr.LoadFromFile( originalprojectname );
while (OrigDpr.Count > 0) and (not SameText('uses',OrigDpr.Strings[0])) do
OrigDpr.Delete(0);
// delete the uses line.
if (OrigDpr.Count > 0) then
OrigDpr.Delete(0);
while (OrigDpr.Count > 0) and
(not SameText('{$R *.RES}',OrigDpr.Strings[OrigDpr.Count-1]) do
OrigDpr.Delete(OrigDpr.Count-1);
// delete the $R reference
if (OrigDpr.Count > 0) then
OrigDpr.Delete(OrigDpr.Count-1);
OrigDpr.SaveToFile( 'pathtotestproject\TESTPROJECT.INC' );
end;
然后在您的测试 DPR 中,在项目的 use 子句中添加以下代码。由于使用子句包含文件已经包含分号,因此请在正常测试单元的末尾使用包含文件。:
USES
// test units go FIRST
{$I pathtotestproject\TESTPROJECT.INC}
我的假设是您正在执行延迟/松散绑定(bind),这就是为什么所有这些首先都是必要的(除了在 DPR 中之外,没有引用这些单位)。否则,只需使用任何单元就足以执行初始化代码。
编辑
另一种选择是让第一个程序生成一个完整的单元,然后在您的测试应用程序中使用该单元。这将从所有引用的单元中编译初始化/最终化代码。然后,您的测试应用程序必须使用您提到的全局存储库来访问这些对象。
这里的一个重要部分是确保测试项目搜索路径包括其他项目的源目录。
关于Delphi:如何在另一个项目中使用一个项目的所有单元和单元引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1166910/
我是一名优秀的程序员,十分优秀!