benutzt:
-DunitX
-delphi.mocks
https://github.com/VSoftTechnologies/Delphi-Mocks
Hallo Leute,
ich habe folgendes Problem:
Ich habe einen Prozessor programiert und für diesen möchte ich eine Testklasse schreiben. Ich übergebe dem Prozessor ein Objekt, Einstellungen und einen Writer(dieser ist vom Interface IWriter).
Um den Prozessor zu testen erzeuge ich einen Mock vom IWriter, und dieser soll ermitteln ob der Prozessor, bedingt durch die Einstellungen, den richtigen Wert vom Typ TValue schreibt. Leider erzeugt dies eine Zugriffsverletzung:
Delphi-Quellcode:
procedure TTestRWProcessor.TestFieldsPrivate;
var
TempWriter: TMock<IWriter>;
lField: TRttiField;
begin
TempWriter := TMock<IWriter>.Create;
lField := FType.GetField('FPrivate'); //FType wird beim Setup erzeugt
TempWriter.Setup.Expect.Once.When.add(lField ,TValue.FromVariant('private'));
FProcessor.write(FObject, [soFieldsAll], TempWriter);
TempWriter.VerifyAll;
end;
Um den Fehler zu ermitteln und ein bisschen zu probieren habe ich mir eine Klasse mit einem Objekt und einem Interface(ITest) gebaut. In dieser sind 3 Prozeduren, die eine benötigt einen String und die andere einen Value. Die dritte führt Beide aus.
Delphi-Quellcode:
procedure TTestObjekt.uebergebeWerteAnMock(aTest: ITest);
var
lValue: TValue;
begin
lValue := TValue.FromVariant('String');
aTest.test2('bla');
aTest.test3(lValue);
end;
Meine Testklasse
Delphi-Quellcode:
procedure TTestRechner.TestParams;
var
tempLogger : TMock<ITest>;
lValue : TValue;
begin
lValue := TValue.FromVariant('String');
tempLogger := TMock<ITest>.Create;
tempLogger.Setup.Expect.Once.When.test2('bla');
// tempLogger.Setup.Expect.Once.When.test3(lValue);
FTestObjekt.uebergebeWerteAnMock(tempLogger);
tempLogger.VerifyAll;
end;
Wenn Test3 ausgeklammert ist, klappt es, andernfals gibt es eine Zugriffsverletung.
Kennt jemand eine Lösung für das Problem?