문제

Dunit이 일반적으로 작동하는 방식은 게시 된 몇 가지 방법을 작성하고 Dunit은 테스트로 실행하는 것입니다. 내가하고 싶은 것은 조금 다릅니다. 데이터를 기반으로 실행 시간에 테스트를 만들고 싶습니다. 입력 파일을 프로세스하여 출력 파일을 생성하는 특정 모듈을 테스트하려고합니다. 알려진 잘 알려진 우수한 출력 파일이있는 일련의 테스트 입력 파일이 있습니다. 아이디어는 각 입력 파일마다 하나의 테스트를 동적으로 생성하는 것입니다.이 파일은 입력을 처리하고 알려진 좋은 제품에 대한 출력을 확인합니다.

그러나 여기서 실제 데이터 소스는 중요하지 않습니다. 어려움은 Dunit이 데이터 중심 방식으로 행동하게 만드는 것입니다. 이 문제를 위해 데이터 소스가 무작위 숫자 생성기 일 뿐이라고 가정하십시오. 다음은 어려움의 핵심에 도달하는 구체적인 문제입니다.

런타임에 테스트 객체 (ttestcase 등)를 만들어

  1. 무작위로 생성 된 정수에서 실행 시간에 명명되었습니다. ( '이름'으로 테스트 런너 트리에 나타나는 테스트 이름을 의미합니다.)
  2. 임의의 정수에 따라 통과하거나 실패합니다. 홀로 홀수를 위해 통과하십시오.

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 앱에서도 루프하고 매개 변수를 사용할 수 있음). 다양한 다른 데이터 파일. 그런 다음 앱이 실행되고 분석을 수행 한 다음 저장 후 종료합니다. 그런 다음 다른 앱은 결과 데이터를 이상적인 데이터와 비교하고 적절한 경우 실패를보고합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top