AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Von 0 auf 100 - Delphi.Mocks ein Mockframework für Delphi

Von 0 auf 100 - Delphi.Mocks ein Mockframework für Delphi

Ein Tutorial von generic · begonnen am 29. Okt 2019 · letzter Beitrag vom 2. Nov 2019
Antwort Antwort
Seite 2 von 2     12
generic
Registriert seit: 24. Mär 2004
Hallo DP,

in den "Von 0 auf 100" Videos stelle ich kurz eine Technologie vor.
In diesem Video stelle ich die Delphi.Mocks vor. Dieses ist ein Framework zum erstellen von Objekt-Instanzen ohne diese konkret programmieren zu müssen. Das kann z.B. für Unittests genutzt werden.

Hier ist das Video:
https://youtu.be/BjMW4VW1UgA

Das Framework kann hier herunter geladen werden:
https://github.com/VSoftTechnologies/Delphi-Mocks
Angehängte Dateien
Dateityp: 7z Delphi.Mocks-Video.7z (7,0 KB, 8x aufgerufen)

Geändert von generic (29. Okt 2019 um 17:03 Uhr)
 
TurboMagic

 
Delphi 12 Athens
 
#11
  Alt 30. Okt 2019, 17:12
Zum Thema Ekon 14: selber schuld, dass du seitdem nicht mehr hingegangen bist?

Zu Spring: Stefan Glienke hat auch erzählt, dass V2.0 in einer Alpha Version
schon von ein paar Leuten erfolgreich eingesetzt wird und das API sich nach
seiner aktuellen Einschätzung wohl nicht mehr großartig ändern wird.

Wenn ich seine Ekon Präsentation richtig verstanden habe, kann man damit Generics
Code "Bloat" richtig gut eindämmen.

Aber auch ich muss mir Spring mal endlich anschauen...

Grüße
TurboMagic
  Mit Zitat antworten Zitat
TiGü

 
Delphi 10.4 Sydney
 
#12
  Alt 31. Okt 2019, 09:57
<OT>
Das kann schnell bescheuert aussehen.
Das will man den lieben Kollegen doch nicht antun
</OT>
Na ja, ich war gedanklich eher bei kleinen In-Ear-Kopfhörern, so dass man auch ganz leicht nur mit einer Seite einem Video zuhören kann.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

 
Delphi 10.2 Tokyo Professional
 
#13
  Alt 31. Okt 2019, 12:35
<OT>
Das kann schnell bescheuert aussehen.
Das will man den lieben Kollegen doch nicht antun
</OT>
Na ja, ich war gedanklich eher bei kleinen In-Ear-Kopfhörern, so dass man auch ganz leicht nur mit einer Seite einem Video zuhören kann.
Auch die Dinger kann ich absolut nicht ab. Ich stamme noch aus einer Zeit, als man noch nicht ständig mit einem Knopf im Ohr herumlief. Mir graut schon davor, wenn ich irgendwann ein Hörgerät brauchen sollte. Aber wir kommen "etwas" vom Thema ab.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

 
Delphi 10.1 Berlin Enterprise
 
#14
  Alt 31. Okt 2019, 17:28
Nur mal so als Teaser, warum Spring.Mocking besser ist als Delphi.Mocks.

Ich arbeite gerade, dass man das Mock Setup aus dem Video bei ca 21:00 so schreiben kann:

ml.Setup.Returns(True).When.TryGetOperation(Arg = 'm', Arg.Ref(mo.Instance).Return);

Syntax und Benamung für den Out Parameter Teil ist noch nicht final.
Stefan

Geändert von Stevie (31. Okt 2019 um 17:30 Uhr)
  Mit Zitat antworten Zitat
Rollo62

 
Delphi 12 Athens
 
#15
  Alt 2. Nov 2019, 08:12
Die Mocks sind sehr interessant für die Entwicklung von neuen Klasse im Team, so setze ich das auch teilweise ein.
Mich würde aber mal interessieren ob man Mocks auch zum Erweitern von bestehenden, aktiven Klassen einsetzen sollte,
also auch generell im produktiven Umfeld in echten Applikationen ?

Ich denke es spricht nichts dagegen, aber es könnte auch sein das Mocks da an gewissen Stellen Probleme machen (Speicherbedarf, Timing, usw.).
Wann sollte man das besser nicht produktiv nutzen, wenn überhaupt ?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

 
Delphi 10.1 Berlin Enterprise
 
#16
  Alt 2. Nov 2019, 09:22
Die Mocks sind sehr interessant für die Entwicklung von neuen Klasse im Team, so setze ich das auch teilweise ein.
Mich würde aber mal interessieren ob man Mocks auch zum Erweitern von bestehenden, aktiven Klassen einsetzen sollte,
also auch generell im produktiven Umfeld in echten Applikationen ?

Ich denke es spricht nichts dagegen, aber es könnte auch sein das Mocks da an gewissen Stellen Probleme machen (Speicherbedarf, Timing, usw.).
Wann sollte man das besser nicht produktiv nutzen, wenn überhaupt ?
Beißt es sich nicht im Konzept schon, im produktiven Betrieb Mocks einzusetzen, die halt nix oder nur einen Ersatz ausführen, anstatt des produktiven Verhaltens?
Was du vermutlich eher meinst, sind dynamische Proxies, die man hinter Interfaces schalten kann, und die vor der eigentlichen das Interface implementierenden Klasse noch Zusatzlogik ausführen, oder?
Stefan
  Mit Zitat antworten Zitat
Rollo62

 
Delphi 12 Athens
 
#17
  Alt 2. Nov 2019, 10:08
Naja, ich meinte schon existierende Klassen etwas zu erweitern.

Es könnte dabei schon Sinn machen und diese Klassen dann eben mit noch nicht 100% ausprogrammierten Erweiterungen benutzt werden können.
Es passiert ja schonmal das man eine alte Klasse um eine kleine Schnittstelle erweitern muss.

Ich habe jetzt gerade auch kein tolles Beispiel, aber es kommen ja immer von aussen neue Anforderungen hinzu (zumindest ist das bei mir oft so).
Vielleicht als Beispiel eine Erweiterung 1FA zu 2FA:
Delphi-Quellcode:
//alte Klasse:
function CanGenerate_1FA_Token : String; // funktionert alles, wird produktiv eingesetzt
function Generate_1FA_Token : String; // funktionert alles, wird produktiv eingesetzt
//Erweiterung:
function CanGenerate_2FA_Token : String; // gemocht, im RELEASE immer False
function Generate_2FA_Token : String; // gemockt im Test, aus gegebenem Anlass, wird das erweitert
Ist vielleicht ein blödes Beispiel, im Moment fällt mir aber nichts Besseres ein.
Natürlich setzte ich mal voraus das beide Funktionen relativ unabhängig sein sollten, und sich deshalb nicht "beissen" dürfen.

Dein Vorschlag würde ja unter Umständen ein ziemliches Redesign bedeuten, was vielleicht gar nicht immer nötig ist, also warum nicht in der Übergangsphase mocken ?

Man kann natürlich auch die Erweiterung erst komplett fertigstellen, und danach erst freigeben, aber falls soetwas mal länger dauern sollte dachte ich (naiv wie ich bin), wäre das Mocken eventuell auch eine Option.

Ich verstehe deine Antwort mal so das Mocks dafür eher nicht geeignet sind um während der
Erweiterungsphase etwas dranzubauen.

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

 
Delphi 10.1 Berlin Enterprise
 
#18
  Alt 2. Nov 2019, 10:35
Ich verstehe deine Antwort mal so das Mocks dafür eher nicht geeignet sind um während der
Erweiterungsphase etwas dranzubauen.
Irgendwer implementiert ja schon das bestehende Interface und somit müssen auch die neuen Methoden implementiert werden, sonst kompilierts nicht.
Dort kann man ja dann Dummy Verhalten einbauen - dafür braucht man keine Mocks, wie sie hier Thema sind.

Mocks, wie sie hier thematisiert wurden sind dafür da, in Unit tests ebend nur genau das implementieren zu müssen, was die getestete Komponente benötigt. Dies ist in vielen Fällen ja pro Test nur ein Teil eines gegebenen Interfaces mit bestimmten Eingaben und ggf Ausgaben. Und dafür muss man dann das Interface nicht herkömmlich in einer Klasse implementieren. Etwas, was in Produktionscode schon gegeben ist, aber erweitert werden soll. Und selbst wenn es ein komplett neues Interface gibt, muss es irgendwann implementiert werden, somit wäre der Gebrauch eines Mocks hier auch unnötig.

Wofür sich Mocks aber durchaus eignen, ist Prototyping - wenn ich nur bestimmte Teile ausprobieren möchte, aber diese durchaus noch weitere Komponenten benutzen, die ich im Prototyp gerade nicht benutzen möchte oder kann. Dann ersetzen die dort ähnlich wie in einem Unit- oder Integrationstest diese Teile.
Stefan

Geändert von Stevie ( 2. Nov 2019 um 10:39 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Tutorial durchsuchen
Tutorial durchsuchen:

Erweiterte Suche
Ansicht

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 10:33 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