Kerangka Tes Komponen OpenCTF membantu membangun tes otomatis untuk semua komponen VCL (visual dan non-visual) dalam aplikasi Delphi. Ini didasarkan pada kerangka kerja Dunit, dan terintegrasi dengan baik dengan proyek pengujian yang ada.
Contoh proyek uji ini berisi satu bentuk dan satu bingkai.
program FormTests;
uses
OpenCTF,
ctfConfig, // configure OpenCTF with our test classes
GUITestRunner,
TestForm in ' TestForm.pas ' { Form1 } ,
TestFrame in ' TestFrame.pas ' { Frame1: TFrame } ;
begin
OpenCTF.RegisterFormClasses([TForm1, TFrame1]);
RunRegisteredTests;
end .Kerangka kerja menggunakan subclass TComponenthandler yang disesuaikan untuk membangun tes komponen.
Dalam contoh ini, kami hanya ingin menguji komponen Timagelist, jadi kami mengesampingkan konstruktor untuk menentukan kelas yang akan diuji.
TImageListTests = class (TComponentHandler)
protected
procedure AddTests ; override;
public
constructor Create;
end ;
...
constructor TImageListTests.Create;
begin
inherited Create(Controls.TImageList); // test only this class (and subclasses)
end ;
procedure TImageListTests.AddTests ;
begin
inherited ;
CurrentSuite.AddTest(TImageListMustContainImages.Create(CurrentComponent)); // see below
// add more tests ...
end ;
Kelas tes khusus kami berasal dari TComponentTest (yang pada gilirannya merupakan dunit tabstracttest). Jadi kita dapat menggunakan semua checkequals / checknotequals / ... metode dunit. Sebagai contoh kami, kami hanya menguji bahwa jumlah gambar dalam daftar imagel tidak sama dengan nol. Perhatikan bahwa untuk setiap komponen pada formulir, satu instance TCCOMPONENTET akan dibuat, dan properti komponennya menunjuk ke komponen yang diuji.
TImageListMustContainImages = class (TComponentTest)
protected
procedure RunTest (testResult: TTestResult); override;
end ;
procedure TImageListMustContainImages.RunTest ;
begin
inherited ;
CheckNotEquals( 0 , (Component as TImageList).Count, ' ImageList is empty ' );
end ;Sekarang kita perlu menambahkan tes ke pengaturan kita. Ini harus terjadi sebelum mendaftarkan kelas formulir.
program FormTests;
uses
OpenCTF,
ctfTestControls, // unit containing my custom TImageList tests
GUITestRunner,
TestForm in ' TestForm.pas ' { Form1 } ,
TestFrame in ' TestFrame.pas ' { Frame1: TFrame } ;
begin
OpenCTF.Add(TImageListTests.Create);
OpenCTF.RegisterFormClasses([TForm1, TFrame1]);
RunRegisteredTests;
end .Alih -alih menempatkan konfigurasi di file sumber proyek (DPR), Anda dapat menulis unit dan memasukkan semua tes (dan unit yang diperlukan) di sana.
program FormTests;
uses
OpenCTF,
ctfConfig, // unit containing my custom configuration
GUITestRunner,
TestForm in ' TestForm.pas ' { Form1 } ,
TestFrame in ' TestFrame.pas ' { Frame1: TFrame } ;
begin
OpenCTF.RegisterFormClasses([TForm1, TFrame1]);
RunRegisteredTests;
end .Contoh konfigurasi melakukan semua pengaturan di bagian inisialisasi. Ini menghemat pengetikan dalam kode sumber proyek, hanya menambahkan unit CTFConfig dan tes akan ditambahkan ke kerangka kerja.
unit ctfConfig;
interface
implementation
uses
OpenCTF,
ctfTestForm, ctfTestNames, ctfTestTabOrder, ctfTestMenus,
StdCtrls, ExtCtrls, Forms, Classes;
initialization
OpenCTF.Add(TBasicFormTests.Create);
OpenCTF.Add(TComponentNameTests.Create);
OpenCTF.Add(TTabOrderTests.Create);
OpenCTF.Add(TMenuItemTests.Create);
end . Dalam beberapa kasus di sana, tes dapat dilewati untuk beberapa kelas. Misalnya, aturan ketat bahwa setiap komponen harus memiliki nama non-default ('Button1' dan 'Button2') mungkin terlalu ketat.
Konfigurasi memungkinkan untuk mengecualikan beberapa kelas dari tes tertentu. Berikut adalah bagian inisialisasi dengan tambahan tambahan:
initialization
OpenCTF.Add(TBasicFormTests.Create);
OpenCTF.Add((TComponentNameTests.Create)
.Exclude(StdCtrls.TLabel) // exclude TLabel
.Exclude(Forms.TFrame) // exclude TFrame
.Exclude(ExtCtrls.TPanel) // exclude TPanel
);
OpenCTF.Add(TTabOrderTests.Create);
OpenCTF.Add(TMenuItemTests.Create);
end . Disusun dan diuji dengan Delphi 2009.
Versi Delphi dan Dunit yang kompatibel diperlukan untuk menggunakan kerangka kerja.
https://michaeljustin.github.io/openctf/
OpenCTF dapat digunakan tanpa menjalankan skrip build. Skrip build berguna untuk pengembang OpenCTF. Mereka menghasilkan dokumentasi API, menyusun contoh projet, dan membangun paket distribusi sumber.
Apache Ant: https://ant.apache.org
Doxygen: http://www.doxygen.nl
pas2dox 0.41: https://sourceforge.net/projects/pas2dox/