2010-11-25 11 views
3

통합 테스트를 위해 제 3 자 구성 요소 (메시지 브로커)의 모든 버전에 대해 한 번 실행되는 DUnit 테스트 슈트를 만들었습니다. 불행히도 일부 테스트는 테스트 된 구성 요소의 일부 버전에서 알려진 버그로 인해 항상 실패합니다.DUnit 테스트를 프로그래밍 방식으로 이름별로 비활성화하려면 어떻게합니까?

즉, 테스트 스위트는 100 %로 완료되지 않습니다. 그러나 자동화 된 테스트의 경우 100 % 성공 점수가 필요합니다. DUnit은 이름으로 테스트 스위트에서 테스트를 비활성화하는 기성의 방법을 제공하지 않습니다.

답변

6

테스트 스위트와 테스트 이름 목록을 취하고 일치하는 이름으로 모든 테스트를 비활성화하며 중첩 된 테스트 스위트로 재귀를 수행하는 절차를 작성했습니다. 합니다 (TStringList를 '제외'를 설치 방법에 생성됩니다)

procedure DisableTests(const ATest: ITest; const AExclude: TStrings); 
var 
    I: Integer; 
begin 
    if AExclude.IndexOf(ATest.Name) <> -1 then 
    begin 
    ATest.Enabled := False; 
    end; 
    for I := 0 to ATest.Tests.Count - 1 do 
    begin 
    DisableTests(ATest.Tests[I] as ITest, AExclude); 
    end 
end; 

사용 예제 :

procedure TSuiteVersion1beta2.SetUp; 
begin 
    // fill test suite 
    inherited; 

    // exclude some tests because they will fail anyway 
    Excludes.Add('TestA'); 
    Excludes.Add('TestB'); 

    DisableTests(Self, Excludes); 
end; 
+0

+1 들으이 나에게 우리 자신의 스위트 룸에 대한 몇 가지 새로운 아이디어를 제공합니다. –

+0

btw, 나는 당신이 당신의 테스트를 등록하는 방법과 당신의 테스트 케이스에있는 각각의 특정 테스트 스위트에 대한 컴포넌트에 대한 참조를 얻는 방법을보고 싶다. –

+0

아마도 OpenCTF (Delphi 용 열린 컴포넌트 테스트 프레임 워크)는 몇 가지 아이디어를 제공하며 모든 단일 컴포넌트에 대한 단위 테스트 스위트를 생성하고 속성을 검증합니다. - http://sourceforge.net/projects/openctf/ – mjn

관련 문제