I'm searching for a way to easily and concisely write a spy for the DUnitX testing framework under Delphi.
In the past, I've used very ugly ways of doing that using :
[TestFixture]
Test = class(TObject)
public
[test]
procedure Test1;
end;
TMyClass = class(TObject)
protected
procedure MyProcedure; virtual;
end;
TMyTestClass = class(TMyClass)
protected
fMyProcedureCalled : Boolean;
procedure MyProcedure; override;
end
procedure TMyTestClass.MyProcedure;
begin
fMyProcedureCalled := true;
inherited;
end;
procedure Test.Test1;
var aObj : TMyTestClass;
begin
TMyTestClass.Create;
Assert.IsTrue(aObj.fMyProcedureCalled);
end;
All of this code to check if a procedure was called. That's too verbose!
Is there a way to write a spy that would help me reduce that code?
Sounds like a use case for a mock (I am using the term mock here because most frameworks refer to their various kinds of test doubles as mock)
In the following example I am using DUnit but it should not make any difference for DUnitX. I am also using the mocking feature from Spring4D 1.2 (I did not check if Delphi Mocks supports this)
Keep in mind though that this only works for virtual methods.