For tests, that are known to fail, you can implement ITestListener
interface and override ShouldRunTest
.
The advantage of this solution (compared to DisableTests
by @WarrenP) is, that it does not affect the check boxes, that determine which tests to run.
I use a common base class TMvTestSuite
for my test suites, that adds a function AddKnownInvalidTest
that can be called in the constructor (e.g. after AddTest
):
type
/// Listener that only implements ShouldRunTest
TIShouldRunTestListener = class(TInterfacedObject, ITestListener)
private
FInvalidTests: TStrings;
function IsInvalidTest(ATest: ITest): Boolean;
protected
function ShouldRunTest(ATest: ITest):Boolean;
procedure Status(test :ITest; const Msg :string);
procedure TestingStarts;
procedure StartTest(test: ITest);
procedure AddSuccess(test: ITest);
procedure AddError(error: TTestFailure);
procedure AddFailure(Failure: TTestFailure);
procedure EndTest(test: ITest);
procedure TestingEnds(testResult :TTestResult);
public
constructor Create(AInvalidTests: TStrings);
end;
TMvTestSuite = class abstract(TTestSuite, ITestSuite, ITest)
private
FInvalidTests: TStrings;
protected
procedure RunTest(TestResult: TTestResult); override;
protected
procedure AddKnownInvalidTest(ATestName: string);
public
destructor Destroy; override;
end;
implementation
constructor TIShouldRunTestListener.Create(AInvalidTests: TStrings);
begin
FInvalidTests := AInvalidTests;
end;
function TIShouldRunTestListener.IsInvalidTest(ATest: ITest): Boolean;
begin
Result := Assigned(FInvalidTests)
and (FInvalidTests.IndexOf(ATest.Name) <> -1);
end;
function TIShouldRunTestListener.ShouldRunTest(ATest: ITest): Boolean;
begin
Result := not IsInvalidTest(ATest);
end;
procedure TIShouldRunTestListener.AddError(error: TTestFailure);
begin
end;
procedure TIShouldRunTestListener.AddFailure(Failure: TTestFailure);
begin
end;
procedure TIShouldRunTestListener.AddSuccess(test: ITest);
begin
end;
procedure TIShouldRunTestListener.EndTest(test: ITest);
begin
end;
procedure TIShouldRunTestListener.StartTest(test: ITest);
begin
end;
procedure TIShouldRunTestListener.Status(test: ITest; const Msg: string);
begin
end;
procedure TIShouldRunTestListener.TestingEnds(testResult: TTestResult);
begin
end;
procedure TIShouldRunTestListener.TestingStarts;
begin
end;
{ TMvTestSuite }
destructor TMvTestSuite.Destroy;
begin
FreeAndNil(FInvalidTests);
inherited;
end;
procedure TMvTestSuite.AddKnownInvalidTest(ATestName: string);
begin
if not Assigned(FInvalidTests) then
FInvalidTests := TStringList.Create;
FInvalidTests.Add(ATestName);
end;
procedure TMvTestSuite.RunTest(TestResult: TTestResult);
begin
TestResult.AddListener(TIShouldRunTestListener.Create(FInvalidTests));
inherited;
end;