4

Delphi XE3 での単体テストに問題があります。1 つの MDIForm と MDIChild フォームの割り当てで構成されるプロジェクトがあります。問題は、MDIChild フォームでテストを実行すると、次のエラーが発生することです。

TestAllDataSrouces: EInvalidOperation
at  $0064346F
SetUp FAILED: Cannot create form. No MDI forms are currently active

私の Setup メソッドは次のようになります。

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;

デモプロジェクト:こちら

4

3 に答える 3

5

あなたがしていることは、機能テストまたは統合テストに似ています。UI が正しく設定されていることを確認しています。その種のテストは単体テストとは異なります。

単体テストは、モジュールに特定の入力を与えると、特定の出力が生成されることを確認することになっています。単体テストはローカライズされています。それらは、他のユニットとは独立してユニットの動作をテストすることを目的としています。UI は特に他のユニットに依存します。それらは入力デバイスからデータを取得し、データベースで動作し、全体として非常に複雑な依存関係を持っています。そのため、単体テストの対象としては不適切です。

この質問を見てください -単体テストと機能テスト

必要な種類のテストを行うには、環境を正しくセットアップしてテストを実行できる独自のツールを作成するのがおそらく最善です。

于 2014-03-16T21:46:26.970 に答える