데이터 중심의 Dunit 테스트
-
22-08-2019 - |
문제
Dunit이 일반적으로 작동하는 방식은 게시 된 몇 가지 방법을 작성하고 Dunit은 테스트로 실행하는 것입니다. 내가하고 싶은 것은 조금 다릅니다. 데이터를 기반으로 실행 시간에 테스트를 만들고 싶습니다. 입력 파일을 프로세스하여 출력 파일을 생성하는 특정 모듈을 테스트하려고합니다. 알려진 잘 알려진 우수한 출력 파일이있는 일련의 테스트 입력 파일이 있습니다. 아이디어는 각 입력 파일마다 하나의 테스트를 동적으로 생성하는 것입니다.이 파일은 입력을 처리하고 알려진 좋은 제품에 대한 출력을 확인합니다.
그러나 여기서 실제 데이터 소스는 중요하지 않습니다. 어려움은 Dunit이 데이터 중심 방식으로 행동하게 만드는 것입니다. 이 문제를 위해 데이터 소스가 무작위 숫자 생성기 일 뿐이라고 가정하십시오. 다음은 어려움의 핵심에 도달하는 구체적인 문제입니다.
런타임에 테스트 객체 (ttestcase 등)를 만들어
- 무작위로 생성 된 정수에서 실행 시간에 명명되었습니다. ( '이름'으로 테스트 런너 트리에 나타나는 테스트 이름을 의미합니다.)
- 임의의 정수에 따라 통과하거나 실패합니다. 홀로 홀수를 위해 통과하십시오.
Dunit의 디자인에서 외모 그런 것들을 가능하게하기에 충분한 유연성을 염두에두고 설계된 것처럼. 그래도 확실하지 않습니다. TabStractTest 및 Itest에서 상속하여 나만의 테스트 클래스를 만들려고했지만 일부 중요한 방법은 액세스 할 수 없었습니다. 나는 또한 ttestcase에서 상속을 시도했지만 그 클래스는 게시 된 방법을 실행한다는 아이디어와 밀접한 관련이 있습니다 (그리고 테스트는 방법의 이름을 따서 명명되었습니다. 모든 테스트를 'GO'라고하며 모든 테스트를 개별적으로 명명하기를 원합니다).
아니면 내가 원하는 것을 할 수있는 Dunit에 대한 대안이 있습니까?
해결책
program UnitTest1;
{$IFDEF CONSOLE_TESTRUNNER}
{$APPTYPE CONSOLE}
{$ENDIF}
uses
Forms, Classes, SysUtils,
TestFramework,
GUITestRunner,
TextTestRunner;
{$R *.RES}
type
TIntTestCase = class(TTestCase)
private
FValue: Integer;
public
constructor Create(AValue: Integer); reintroduce;
function GetName: string; override;
published
procedure Run;
end;
{ TIntTestCase }
constructor TIntTestCase.Create(AValue: Integer);
begin
inherited Create('Run');
FValue := AValue;
end;
function TIntTestCase.GetName: string;
begin
Result := Format('Run_%.3d', [FValue]);
end;
procedure TIntTestCase.Run;
begin
Check(FValue mod 2 = 0, Format('%d is not an even value', [FValue]));
end;
procedure RegisterTests;
const
TestCount = 10;
ValueHigh = 1000;
var
I: Integer;
begin
Randomize;
for I := 0 to TestCount - 1 do
RegisterTest(TIntTestCase.Create(Random(ValueHigh) + 1));
end;
begin
Application.Initialize;
RegisterTests;
if IsConsole then
TextTestRunner.RunRegisteredTests
else
GUITestRunner.RunRegisteredTests;
end.
다른 팁
기본적으로 단일 "Super-Test"기능을 갖고 싶다고 말한 다음 각 데이터 파일마다 다른 테스트를 호출합니다. 이것이 우리가 Dunit 테스트 중 하나에서하는 일입니다. 사용 가능한 각 파일을 루프에 차례로로드하고 적절한 점검으로 테스트를 실행합니다.
동일한 프로젝트에서 최종 앱과 데이터로드 및 분석을 테스트하기 위해 사용하는 대안은 FinalBuilder와 같은 것을 사용하여 응용 프로그램에서 루프를 사용하는 것입니다 (아마도 Dunit 앱에서도 루프하고 매개 변수를 사용할 수 있음). 다양한 다른 데이터 파일. 그런 다음 앱이 실행되고 분석을 수행 한 다음 저장 후 종료합니다. 그런 다음 다른 앱은 결과 데이터를 이상적인 데이터와 비교하고 적절한 경우 실패를보고합니다.