2010-11-25 16 views
3

Für Integrationstests habe ich eine DUnit-Testsuite erstellt, die für jede Version einer Drittanbieterkomponente (ein Nachrichtenbroker) einmal ausgeführt wird. Leider schlagen einige Tests immer aufgrund bekannter Fehler in einigen Versionen der getesteten Komponente fehl.Wie kann ich DUnit Tests programmgesteuert durch Namen deaktivieren?

Dies bedeutet, dass die Testsuiten niemals mit 100% abgeschlossen werden. Für automatisierte Tests ist jedoch eine 100% ige Erfolgsbewertung erforderlich. DUnit bietet keine vorgefertigte Methode, um Tests in einer Testsuite nach Namen zu deaktivieren.

Antwort

6

Ich schrieb eine Prozedur, die eine Testsuite und eine Liste von Testnamen nimmt, alle Tests mit einem passenden Namen deaktiviert und auch eine Rekursion in verschachtelte Testsuiten durchführt.

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; 

Beispiel zur Nutzung (der TStringList ‚Ausgeschlossen‘ wird im Setup-Methode erstellt):

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 thx, das gibt mir ein paar neue Ideen für unsere eigenen Suiten. –

+0

übrigens, ich würde gerne sehen, wie Sie Ihre Tests registrieren und wie Sie einen Verweis auf die Komponente für jede spezifische Testsuite in Ihrem Testfall bekommen. –

+0

vielleicht OpenCTF (offene Komponententestframework für Delphi) gibt einige Ideen, es generiert Suiten von Komponententests für jede einzelne Komponente und überprüft ihre Eigenschaften - http://sourceforge.net/projects/openctf/ – mjn