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
 
#1

IInvokable nachträglich einem Interface hinzufügen

  Alt 3. Sep 2018, 20:30
Hallo liebe Delphianer,

Das Delphi-Mocks braucht ja zwingend Methodeninformationen ($M+) um arbeiten zu können. Nun habe ich ein Problem beim Testen diverser Klassen, welche von einem Interface abhängig sind, welches nicht von IInvokable erbt und auch keine Methodeninformationen hat.

Da das Interface fest in einem Delphi-Package verankert ist, habe ich keine Möglichkeit das noch nachträglich einzubauen. (Bzw. sollte das nur der letzte Ausweg sein. Ich suche eine elegantere Lösung , da ich diese Infos nur für die Tests brauche...)

Nun die große Frage: Bekomme ich diese Informationen irgendwie nachträglich rein?
Das Interface "abzuleiten" und für dieses die Methodenionformationen mittels $M+ hinzu zu compilieren klappt leider nicht.

Ich versuche das ganze zusätzlich noch einmal zu veranschaulichen:

Gegeben ist ein Interface, welches ich nicht ändern kann:
Delphi-Quellcode:
INichtAenderbaresInterface = interface // Hier fehlt das (IInvokable) oder $M+
  procedure MacheEtwas;
  procedure MacheEtwasAnderes;
end;
Und eine Klasse, welches dieses Interface benutzt
Delphi-Quellcode:
TEineKlasse = class
private
  FBenoetigtesInterface: INichtAenderbaresInterface;
public
  procedure IchSollGetestetWerden;
  constructor Create(const BenoetigtesInterface: INichtAenderbaresInterface);
end;

...
TEineKlasse.Create(const BenoetigtesInterface: INichtAenderbaresInterface);
begin
  FBenoetigtesInterface := BenoetigtesInterface;
end;

TEineKlasse.IchSollGetestetWerden;
begin
  // Die Funktion greift direkt auf das Interface zu
  FBenoetigtesInterface.MacheEtwas;
  // ....
  FBenoetigtesInterface.MacheEtwasAnderes;
end;
Diese Klasse funktioniert in der laufenden Applikation, jedoch nicht wenn ich sie teste und das Interface mocke. Beispielcode in DUnitX:
Delphi-Quellcode:
procedure TestFall.Teste;
var
  dummy: TMock<INichtAenderbaresInterface>;
  TesteEineKlasse: TEineKlasse;
begin
  dummy := TMock<INichtAenderbaresInterface>.Create; // <-- Hier knallt es, da keine RTTI Infos
  TesteEineKlasse := TEineKlasse.Create(dummy);
  TesteEineKlasse.IchSollGetestetWerden;
end;
Für Ideen und Ansätze bedanke ich mich schon vorab
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 21:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz