2015-08-27 4 views
0

Я использую Delphi XE7 и хочу протестировать свою программу с помощью модульного теста, предоставленного DUnit. Мой код:Какие параметры следует передать конструктору формы?

unit Unit1; 

interface 

uses 
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; 

type 
    TForm1 = class(TForm) 
    Button1: TButton; 
    Edit1: TEdit; 
    Edit2: TEdit; 
    Edit3: TEdit; 
    procedure Button1Click(Sender: TObject); 
    procedure FormActivate(Sender: TObject); 
    procedure FormCreate(Sender: TObject); 
    private 
    public 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
with Form1 do 
Edit3.Text := IntToStr(StrToInt(Edit1.Text) + StrToInt(Edit2.Text)); 
end; 

procedure TForm1.FormActivate(Sender: TObject); 
begin 
Form1.Edit1.Text := '5'; 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
Form1.Edit2.Text := '4'; 
end; 

end. 

Так я создал тестовый блок с некоторыми тестами для кода:

unit TestUnit1; 

interface 

uses 
    TestFramework, System.SysUtils, Vcl.Graphics, Vcl.StdCtrls, Winapi.Windows, 
    System.Variants, System.Classes, Vcl.Dialogs, Vcl.Controls, Vcl.Forms, 
    Winapi.Messages, Unit1; 

type 

    TestTForm1 = class(TTestCase) 
    strict private 
    FForm1: TForm1; 
    public 
    procedure SetUp; override; 
    procedure TearDown; override; 
    published 
    procedure TestButton1Click; 
    procedure TestFormActivate; 
    procedure TestFormCreate; 
    end; 

implementation 

procedure TestTForm1.SetUp; 
begin 
    FForm1 := TForm1.Create; 
end; 

procedure TestTForm1.TearDown; 
begin 
    FForm1.Free; 
    FForm1 := nil; 
end; 

procedure TestTForm1.TestButton1Click; 
var 
    Sender: TObject; 
begin 
    FForm1.Button1Click(Sender); 
    CheckEquals(StrToInt(Form1.Edit1.Text)+StrToInt(Form1.Edit2.Text),StrToInt(Form1.Edit3.Text)); 
end; 

procedure TestTForm1.TestFormActivate; 
var 
    Sender: TObject; 
begin 
    FForm1.FormActivate(Sender); 
    CheckEquals(5, StrToInt(Form1.Edit1.Text)); 
end; 

procedure TestTForm1.TestFormCreate; 
var 
    Sender: TObject; 
begin 
    FForm1.FormCreate(Sender); 
    CheckEquals(4, StrToInt(Form1.Edit2.Text)); 
end; 

initialization 
    RegisterTest(TestTForm1.Suite); 
end. 

Моей проблема сейчас в том, что, когда я хочу, чтобы начать тестирование блока я получаю e2035 ошибки Недостаточно фактических параметров в «FForm1: = TForm1.Create;» Я уже знаю, что ошибка означает, что параметры отсутствуют, но я понятия не имею, какие параметры я могу добавить, чтобы код работал. Кто-нибудь знает какую-либо помощь?

+2

Пробовал ли вы читать документацию для 'TForm.Create', чтобы узнать, какие параметры он ожидает? –

+0

Я прочитал документацию, но поскольку я в основном программирую на Java, я пытался использовать «null» в качестве параметра, и это явно не сработало. Я просто не знал, что для Delphi это не нулевой, а нулевой. – Thuvok

ответ

3

Такие ошибки легко разрешаются путем чтения документации. Документация для этого конструктора можно найти здесь: http://docwiki.embarcadero.com/Libraries/en/Vcl.Forms.TCustomForm.Create

constructor Create(AOwner: TComponent); override; 

Таким образом, вы должны предоставить владельцу. Как это:

FForm1 := TForm1.Create(nil); 

Там нет необходимости снабжать владельцем, я полагаю, потому что вы управляете сроком службой формы.

Смежные вопросы