เฟรมเวิร์กการทดสอบส่วนประกอบ 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 .เฟรมเวิร์กใช้คลาสย่อย 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 (ซึ่งจะเป็นแท็บ Dunit TabstractTest) ดังนั้นเราสามารถใช้ checkequals / checknotequals ทั้งหมด / ... วิธีการของ Dunit สำหรับตัวอย่างของเราเราทดสอบว่าจำนวนภาพใน 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 . ในบางกรณีการทดสอบอาจถูกข้ามสำหรับบางชั้นเรียน ตัวอย่างเช่นกฎที่เข้มงวดที่ทุกองค์ประกอบจะต้องมีชื่อที่ไม่ใช่ default ('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/