OpenCTF 구성 요소 테스트 프레임 워크는 델파이 애플리케이션에서 모든 (시각적 및 비 시각적) VCL 구성 요소에 대한 자동 테스트를 구축하는 데 도움이됩니다. 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의 이미지 수가 0과 같지 않다는 것을 테스트합니다. 양식의 모든 구성 요소에 대해 하나의 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 문서를 생성하고 예제 프로젯을 컴파일하며 소스 배포 패키지를 작성합니다.
Apache Ant : https://ant.apache.org
Doxygen : http://www.doxygen.nl
PAS2DOX 0.41 : https://sourceforge.net/projects/pas2dox/