我想要實現這一點的方法是創建一個程序來獲取現有的DPR文件並生成一個包含文件,然後在我的測試應用程序中使用它。你可以使用tStringlist來完成大部分的工作。該項目將在運行PRIOR之前構建您的測試用例。
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中,在您的項目使用條款中添加以下代碼。由於使用條款包括文件已經包含了分號,使用包含文件在您的正常測試單元結束:
USES
// test units go FIRST
{$I pathtotestproject\TESTPROJECT.INC}
我的假設是,你正在執行遲到/鬆散綁定,這就是爲什麼所有的這首先是必要的(除了進入DPR之外,這些單位沒有被引用)。否則,只要使用任何一個單元就足以讓初始化代碼執行。
編輯
另一種選擇是有第一個程序生成一個完整的單元,然後在您的測試應用程序使用本機。這將在所有引用單元的初始化/終止代碼中進行編譯。然後,您的測試應用程序將不得不使用您提到的全局存儲庫來訪問這些對象。
這裏的一個重要部分是確保測試項目搜索路徑包含其他項目的源目錄。
另一方面,如果一個單位在.dpr中,例如一個錯誤的路徑,可以得到可怕的奇怪錯誤。 – 2009-07-22 21:14:28
當測試引用主項目的單元時,他們需要引用它們的路徑,據我所知只有在dpr中才有可能。 – Ozan 2009-07-23 11:01:54