【发布时间】:2014-03-16 17:57:41
【问题描述】:
嘿,我在 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;
演示项目:Here
【问题讨论】:
-
错误信息解释了问题。没有 MDI 父窗体。
-
有没有办法在测试中将表单创建为 MDIForm 而不是 Child?
-
我不明白这个问题。
-
这个问题有简单的解决方案吗?
-
DUnit 和 MDI 真的不能很好地混合。您是在测试 GUI,还是只是将所有业务逻辑与 GUI 混合在一起?
标签: delphi unit-testing mdi delphi-xe3 dunit