[英]DUnit Cannot create form. No MDI forms are currently active
嘿,我在Delphi XE3中的單元測試有問題我有一個項目,包括1個MDIForm和分配MDIChild表單然后問題是,當我在我的MDIChild表單上運行測試時,我收到此錯誤:
TestAllDataSrouces: EInvalidOperation
at $0064346F
SetUp FAILED: Cannot create form. No MDI forms are currently active
我的安裝方法如下所示:
procedure TestTCustomerCard.SetUp;
begin
FCustomerCard := TCustomerCard.Create(Application);
end;
我該怎么做才能解決這個錯誤? 到目前為止我試過:
FCustomerCard := TCustomerCard.Create(Application.MainForm);
FCustomerCard := TCustomerCard.Create(nil);
和
procedure TestTCustomerCard.SetUp;
var
a : TForm;
begin
a := TForm.Create(nil);
a.FormStyle := fsMDIForm;
FCustomerCard := TCustomerCard.Create(a);
end;
我的測試是:
procedure TestTCustomerCard.TestAllDataSrouces;
var
I: Integer;
begin
for I := 0 to FCustomerCard.ComponentCount-1 do
begin
if (FCustomerCard.Components[i] is TcxLookupComboBox) then
begin
Check(TcxLookupComboBox(FCustomerCard.Components[i]).Properties.ListSource = nil,'Error no ListSource, Lookup: '+TcxLookupComboBox(FCustomerCard.Components[i]).Name+' Parent: '+TcxLookupComboBox(FCustomerCard.Components[i]).Parent.Name);
end;
if (FCustomerCard.Components[i] is TcxDBTextEdit) then
begin
Check(TcxDBTextEdit(FCustomerCard.Components[i]).DataBinding.DataSource = nil,'Error No DataSet, Text Edit: '+TcxDBTextEdit(FCustomerCard.Components[i]).Name+' Parent: '+TcxDBTextEdit(FCustomerCard.Components[i]).Parent.Name);
end;
if (FCustomerCard.Components[i] is TcxGridDBTableView) then
begin
Check(TcxGridDBTableView(FCustomerCard.Components[i]).DataController.DataSource = nil,'Error no Data Source, DB Grid View: '+TcxGridDBTableView(FCustomerCard.Components[i]).Name);
end;
end;
end;
演示項目: 這里
您正在做的更像是功能測試或集成測試。 您正在檢查您的UI是否已正確設置。 這種測試不同於單元測試。
單元測試應該檢查如果給模塊某些輸入,那么它們會產生某些輸出。 單元測試已本地化。 它們旨在獨立於其他單元測試單元的行為。 UI特別依賴於其他單位。 它們從輸入設備獲取數據並在數據庫上操作,並且總體上具有相當復雜的依賴性集。 這使它們成為單元測試的糟糕目標。
看看這個問題 - 單元測試與功能測試
要進行所需的測試,最好自己制作可以正確設置環境並執行測試的工具。
錯誤消息指出了問題。 如果您需要MDI子表單,則必須具有MDI父表單。 並且該父表單必須是您程序的主要形式。 很難在DUnit項目中實現。 您的解決方案似乎是:
我遇到了同樣的問題,我決定實施David Heffernan的建議和“讓你的形式受到測試,而不是MDI子形式”。
在這里,我將描述如何實現這一目標。 我已在我的測試用例單元中進行了所有更改。
制作繼承原始MDI子表單的測試表單
type TTestCustomerCard = class(TCustomerCard) end;
在測試用例類之前添加它。
將dfm文件或表單(例如CustomerCard.dfm)復制到TestCustomerCard.dfm
在任何文本編輯器中打開TestCustomerCard.dfm,刪除行
FormStyle = fsMDIChild
( 因為fsNormal是默認值 ),
更改第一行object CustomerCard: TCustomerCard
object TestCustomerCard: TTestCustomerCard
添加指令{$R TestCustomerCard.dfm }
在你的SetUp方法而不是
FCustomerCard := TCustomerCard.Create(Application);
寫
FCustomerCard := TTestCustomerCard.CreateNew(Application); InitComponentRes( 'TTESTCUSTOMERCARD', FCustomerCard );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.