簡體   English   中英

DUnit測試-無法創建表單。 當前沒有MDI表格處於活動狀態

[英]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 LebeauRemy Lebeau的見解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM