[英]DUnit test - Cannot create form. No MDI forms are currently active
我是從DUnit測試開始的,因此對於任何新手錯誤,我們都深表歉意。 當我嘗試運行簡單測試並且編譯器運行測試類的SetUp時,它將停止返回消息“ 無法創建表單”。 當前沒有MDI表單處於活動狀態 。
經過研究,我發現了一些解釋,但都與我的問題無關。
問題似乎是當我調用子級起源類的Create方法時-按起源,我的意思是該類具有我要測試的所有過程和功能的類,請使用TfrmFoo進行調用。 我的測試類應該是TestTfrmFoo。 TFrmFoo的父級帶有一些基本代碼TfrmParentFoo。
我正在這樣調用Create方法:
...
implementation
procedure TestTfrmFoo.SetUp;
begin
FfrmParentFoo := TfrmParentFoo.Create(nil);
FfrmFoo := TfrmFoo.Create(FfrmParentFoo);
end;
procedure TestTfrmFoo.TearDown;
begin
FfrmFoo.Free;
FfrmFoo := nil;
end;
...
之后,將調用TfrmFoo類的Create方法,並發生以下錯誤:' 無法創建表單。 當前沒有MDI表單處於活動狀態 。
我已經嘗試覆蓋子類TfrmFoo的創建,將FormStyle屬性設置為'fsNormal'而不是'fsMDIChild',並且什么也沒有。 我還發現了有關使用sleep(500)的一些想法,但問題仍然存在。
編輯:在Remy Lebeau
做出貢獻之后,我更改了SetUp測試,以在調用子級之前將其創建為父級表單,並將其用作創建子級的參數。 同樣的錯誤信息。 我有做錯什么嗎?
還有其他提示嗎? TKS!
當TForm
有其FormStyle
設置為fsMDIChild
,該項目必須有一個Application.MainForm
創建其FormStyle
設置為fsMDIForm
。 這是VCL的硬編碼要求 ,而不是底層MDI系統的硬編碼要求 (盡管有一些方法可以通過一些手動工作來規避此限制 )。
您所看到的錯誤意味着你的項目沒有一個Application.MainForm
創建並設置為fsMDIForm
任何之前fsMDIChild
創建形式。 您需要解決此問題。
在其構造函數或OnCreate
事件中設置子窗體的FormStyle
為時已晚,因為在子窗體創建其HWND時會發生錯誤,該錯誤發生在DFM流處理過程的早期,而Create
/ OnCreate
有機會嘗試分配FormStyle
。
經過幾次嘗試,我僅刪除了子Create方法
FfrmFoo := TfrmFoo.Create(FfrmParentFoo);
並像魅力一樣工作:D。
問題是因為即使在創建父新實例之后,我仍試圖創建新的子實例。 最終代碼如下所示:
...
implementation
procedure TestTfrmFoo.SetUp;
begin
FfrmParentFoo := TfrmParentFoo.Create(nil);
end;
procedure TestTfrmFoo.TearDown;
begin
FfrmFoo.Free;
FfrmFoo := nil;
end;
...
感Remy Lebeau
( Remy Lebeau
的見解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.