يساعد إطار اختبار مكون OpenCTF على بناء اختبارات تلقائية لجميع مكونات VCL (المرئية وغير المرئية) في تطبيق Delphi. يعتمد على إطار Dunit ، ويتكامل بشكل جيد مع مشاريع الاختبار الحالية.
يحتوي مشروع اختبار المثال هذا على نموذج واحد وإطار واحد.
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 .يستخدم Framework فئات فرعية مخصصة TComponentHandler لإنشاء اختبارات المكون.
في هذا المثال ، نريد اختبار مكونات timagelist فقط ، لذلك نقوم بتجاوز المُنشئ لتحديد الفئات المراد اختبارها.
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 ;
يتم اشتقاق فئة الاختبار المخصصة لدينا من TComponentTest (والتي بدورها هي tabstracttest dunit). حتى نتمكن من استخدام جميع checkequals / checknotequals / ... طرق dunit. على سبيل المثال ، نختبر فقط أن عدد الصور في The Imagelist لا يساوي الصفر. لاحظ أنه لكل مكون في النموذج ، سيتم إنشاء مثيل واحد tcomponentTest ، وتشير خاصية المكون الخاصة به إلى المكون قيد الاختبار.
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 ;الآن نحتاج إلى إضافة الاختبار إلى إعدادنا. يجب أن يحدث هذا قبل تسجيل فئات النموذج.
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 .بدلاً من وضع التكوين في ملف مصدر المشروع (DPR) ، يمكنك كتابة وحدة وتضمين جميع الاختبارات (والوحدات المطلوبة) هناك.
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 .يقوم مثال التكوين بجميع الإعداد في قسم التهيئة. هذا يحفظ الكتابة في رمز مصدر المشروع ، وإضافة فقط وحدة CTFConfig وسيتم إضافة الاختبارات إلى الإطار.
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 . في بعض الحالات هناك ، قد يتم تخطي الاختبارات لبعض الفصول. على سبيل المثال ، قد تكون القاعدة الصارمة القائلة بأن كل مكون يجب أن يكون له اسم غير متفرج ("Button1" و "Button2") صارمة للغاية.
يسمح التكوين باستبعاد بعض الفئات من اختبار معين. فيما يلي قسم التهيئة مع استبعاد إضافي:
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 . تم تجميعها واختبارها مع Delphi 2009.
مطلوب نسخة متوافقة من Delphi و Dunit لاستخدام الإطار.
https://michaeljustin.github.io/openctf/
يمكن استخدام OpenCTF دون تشغيل البرنامج النصي للبناء. البرامج النصية البناء مفيدة لمطوري OpenCTF. يقومون بإنشاء وثائق API ، وتجميع مثال Projets ، وإنشاء حزمة توزيع المصدر.
Apache Ant: https://ant.apache.org
doxygen: http://www.doxygen.nl
Pas2dox 0.41: https://sourceforge.net/projects/pas2dox/