Einzelnen Beitrag anzeigen

WiPhi

Registriert seit: 19. Feb 2015
90 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: IInvokable nachträglich einem Interface hinzufügen

  Alt 4. Sep 2018, 16:00
... die Interface Deklaration zu kopieren, ihm $M+ zu verpassen und das im Mock zu benutzen und dann beim Übergeben an deine zu testende Klasse zu hardcasten.
Da spuckt mir leider das TVirtualInterface in die Suppe:
Code:
"Unzureichende RTTI zur Unterstützung dieser Operation verfügbar"
Ich muss das Interface ja dann von dem ursprünglichen "erben" lassen, das ich den Cast machen kann, oder?
Delphi-Quellcode:
{$M+}
ITestNichtAenderbaresInterface = interface(INichtAenderbaresInterface)
  procedure MacheEtwas;
  procedure MacheEtwasAnderes;
end;
{$M-}
Was mich dann zu dieser Lösung bringt:
Delphi-Quellcode:
procedure TestFall.Teste;
var
  dummy: TMock<ITestNichtAenderbaresInterface>;
  TesteEineKlasse: TEineKlasse;
begin
  dummy := TMock<ITestNichtAenderbaresInterface>.Create; // <-- Mag er, kein Problem mehr
  TesteEineKlasse := TEineKlasse.Create(ITestNichtAenderbaresInterface(dummy)); // <-- Hardcast
  TesteEineKlasse.IchSollGetestetWerden; // Aufruf der zu testenden Methode
end;
... ruft auch den Testfall auf
Delphi-Quellcode:
TEineKlasse.IchSollGetestetWerden;
begin
  FBenoetigtesInterface.MacheEtwas; // <-- Jetzt knallt es hier mit einer EInsufficientRtti
  // ....
  FBenoetigtesInterface.MacheEtwasAnderes;
end;
... Den Zugriff das die Interface-Methode, welche ich ihm bei $M+ gegeben habe, sieht er trotzdem nicht und versucht stattdessen die ursprüngliche aufzurufen. (Interface Methoden zu überschreiben geht ja auch nicht )

Ich glaube auch nicht das Du das so meintest, wie das mit der Ableitung gemacht habe. Da hab ich sicher was falsch verstanden. Aber wenn ich das Interface nicht von dem ursprünglichen ableite, gehen auch keine Typecasts mehr. Ich stehe sozusagen etwas auf dem Schlauch. Vielleicht brauche ich auch noch einen Kaffee .

Ich danke Dir aber schon mal für den Input!
Wer sucht, der findet. Wer länger sucht, findet mehr.
  Mit Zitat antworten Zitat