AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign IInvokable nachträglich einem Interface hinzufügen
Thema durchsuchen
Ansicht
Themen-Optionen

IInvokable nachträglich einem Interface hinzufügen

Ein Thema von WiPhi · begonnen am 3. Sep 2018 · letzter Beitrag vom 6. Sep 2018
 
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
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz