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
Antwort Antwort
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.042 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

AW: IInvokable nachträglich einem Interface hinzufügen

  Alt 6. Sep 2018, 11:39
Bevor wir hier noch mehr rumhacken mal die Frage: über was für ein Package reden wir hier? Drittanbieter ohne Code, wo man nicht mal ebend beherzt ein {$M+} reinschreiben und rekompilieren kann?

Davon abgesehen verwirrt mich der code etwas. Was ist nun org ? Das gemockte IFoo? Wenn ja, na dann hast du ihm ja wohl im mock Setup gesagt, dass er bei DoBar irgendwas sinnvolles zurück geben soll oder?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 6. Sep 2018 um 11:42 Uhr)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#2

AW: IInvokable nachträglich einem Interface hinzufügen

  Alt 6. Sep 2018, 12:27
Wo ist das Problem?

Vorgehen nach Schema F plus der Methode etwas Lben in die Mock-Hülle pusten
Delphi-Quellcode:
program MockMock;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Rtti,
  Delphi.Mocks;

type
  IBar = interface
    ['{BFDEEA1F-182C-4009-93DA-78236C497E2E}']
    procedure Bar( );
  end;

  IFoo = interface
    ['{45486F85-F11C-47B8-A85A-328C8845CA41}']
    function Foo( ): IBar;
  end;

type
{$M+}
  IMirrorBar = interface
    ['{AC275EFC-EED0-46A9-9409-8D11B3A86AF9}']
    procedure Bar( );
  end;
{$M-}

{$M+}
  IMirrorFoo = interface
    ['{B5628A7F-7ECF-4123-A079-0193C8894185}']
    function Foo( ): IBar;
  end;
{$M-}


procedure Test( );
var
  foomock: TMock<IMirrorFoo>;
  foomirror: IMirrorFoo;
  foo: IFoo;
  barmock: TMock<IMirrorBar>;
  barmirror: IMirrorBar;
  bar: IBar;
begin
  barmock := TMock<IMirrorBar>.Create( );
  barmock.Setup.WillExecute( 'Bar', function( const args: TArray<TValue>; const ReturnType: TRttiType ): TValue
    begin
      WriteLn( 'Bar called' );
    end );
  barmirror := barmock;
  bar := IBar( barmirror );

  foomock := TMock<IMirrorFoo>.Create( );
  foomock.Setup.WillExecute( 'Foo', function( const args: TArray<TValue>; const ReturnType: TRttiType ): TValue
    begin
      WriteLn( 'Foo called' );

      Result := TValue.From( bar );
    end );
  foomirror := foomock;
  foo := IFoo( foomirror );

  foo.Foo( ).Bar( );
end;

begin
  try
    Test( );
  except
    on E: Exception do
      Writeln( E.ClassName, ': ', E.Message );
  end;
  ReadLn;
end.
  Mit Zitat antworten Zitat
WiPhi

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

AW: IInvokable nachträglich einem Interface hinzufügen

  Alt 6. Sep 2018, 14:04
Es geht um ein Drittanbieter Package zu welchem ich auch den Quellcode habe.
Das Interface anzupassen und das Package neu zu übersetzen wäre nicht das Problem. Müsste ich nur bei jedem Update des Packages den Quellcode abgleichen (was bei diesem wahrscheinlich relativ einfach wäre, da aller Interfaces zentral liegen).

Mir stellt sich aber dabei die grundsätzliche Frage, wie man mit so etwas am besten umgeht. Ich habe ja auch einige Packages ohne Quellcode, dessen Interfaces ich nutze, auf die ich zugreife und testen möchte.

Wo ist das Problem?

Vorgehen nach Schema F plus der Methode etwas Lben in die Mock-Hülle pusten
Danke! So etwas habe ich gesucht. Ich bin auf dem Gebiet der Mocks noch neu.

Danke an alle für die hilfreiche Unterstützung!
Wer sucht, der findet. Wer länger sucht, findet mehr.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#4

AW: IInvokable nachträglich einem Interface hinzufügen

  Alt 6. Sep 2018, 14:51
Ich denke du machst da generell etwas falsch.

Eigentlich definiert man sich eigene Interfaces und verwendet diese in der Anwendung. Bei der Implementierung dieser Interfaces kann man dann auf diese Drittanbieter zurückgreifen. Dadurch kommen diese aber nur mittelbar mit der Anwendung in Berührung.

Die Unit-Tests erfolgen auf jeden Fall mit den eigenen Interfaces.
  Mit Zitat antworten Zitat
Antwort Antwort

 

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:18 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