Nein, so sollst du das machen
Delphi-Quellcode:
procedure Test( );
var
mock: TMock<IMirrorFoo>;
mirror: IMirrorFoo;
org: IFoo;
begin
// .....
mirror := mock;
org := IFoo( mirror ); // <-- WiPhi: darauf bin ich nicht gekommen, ehrlich gesagt wundert es mich das der Compiler das zulässt
org.Foo();
Das sieht sehr gut aus! Vielen Dank.
Leider zieht das Problem weitere Kreise. Ich habe ein Interface (in dem
Package) gefunden, welches als Rückgabewert einer Funktion ein Interface liefert, welches auch keine
RTTI Informationen enthält. Sobald er im Test darauf zugreifen möchte, schmiert er mit einer Zugriffsverletzung ab.
Delphi-Quellcode:
IBar = interface
procedure KannNichts;
end;
IFoo = interface
function DoBar: IBar;
end;
{$M+}
IMirrorFoo = interface
function DoBar: IBar;
end;
{$M-}
// ........
procedure TestKlasse.TesteFoo;
var
mock: TMock<IMirrorFoo>;
mirror: IMirrorFoo;
foo: IFoo;
bar: IBar;
begin
// ... Code wie bisher ...
bar := org.DoBar; // <-- Da kommt nichts mehr sinnvolles, Zugriffsverletztung
end;
Dieses IBar Interface auch nch irgendwie da rein zu mogeln kommt mir fast einer Schande gleich, dennoch die Frage ob es möglich ist.
Aber!
Wahrscheinlich wäre es sinnvoller die betreffenden Interfaces zu wrappen und nur noch über diese Wrapper Interfaces zu arbeiten. Dann müsste ich zwar ziemlich viel doppelt schreiben (Wrapper und
Package Interfaces), aber ich könnte das
Package evtl. jederzeit ersetzen und wesentlich komfortabler testen.
Wie würdet ihr damit verfahren? (Ein Glück hier gibt's so viele Profis
)
Wer sucht, der findet. Wer länger sucht, findet mehr.