Wie kann ich deaktivieren DUnit-Tests mit Namen programmatisch?
-
28-09-2019 - |
Frage
Für die Integration Tests habe ich eine DUnit-Testsuite, die für jede Version eines Dritten Komponente wird einmal (ein Message Broker). Leider immer einige Tests aufgrund von bekannten Fehlern nicht in einigen Versionen der getesteten Komponente.
Das heißt, die Testsuiten werden nie mit 100% abzuschließen. jedoch für automatisierte Tests, ein 100% ige Erfolg Punktzahl erforderlich. DUnit bietet keine fertige Methode zu deaktivieren Tests in einer Testsuite mit Namen.
Lösung
Ich schrieb ein Verfahren, das eine Testsuite und eine Liste der Testnamen nimmt, deaktiviert alle Tests mit einem passenden Namen, und führt auch eine Rekursion in verschachtelte Testsuiten.
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 für die Verwendung (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;