AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unittests generieren ?

Ein Thema von Ghostwalker · begonnen am 8. Okt 2018 · letzter Beitrag vom 10. Okt 2018
Antwort Antwort
Wosi

Registriert seit: 29. Aug 2007
59 Beiträge
 
#1

AW: Unittests generieren ?

  Alt 8. Okt 2018, 17:01
Ich habe das Gefühl, du schaffst dir mit den einzelnen Record-Typen für jede Maßeinheit mehr Arbeit als alles andere und produzierst dadurch eine menge doppelten Code. Welchen Vorteil erhoffst du dir durch die Typen?
Wäre es nicht einfacher, intern alle Gewichtswerte in Gramm vorliegen zu haben? Rechen- und Vergleichsoperationen gibt es dann gratis.
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Unittests generieren ?

  Alt 8. Okt 2018, 18:14
Die Gewichte waren hier nur ein Beispiel (oder eine Analogie).

Die Typen dienen als Basis für div. andere Typen und Klassen, die damit arbeiten.

Da ich die letztliche Zielanwendung nicht kenne, muss ich den größt Möglichen Bereich abdecken. D.h. z.B.
vom einfachen Rezept bis hin zur Tonagenberechnung für Containerschiffe sollte alles möglich sein.

Und...2000t in Gramm sprengt so ziemlich jeden normalen Typ
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Wosi

Registriert seit: 29. Aug 2007
59 Beiträge
 
#3

AW: Unittests generieren ?

  Alt 8. Okt 2018, 18:51
Integer kommt bis ~2.100t, Cardinal bis ~4.300t und Int64 bis ~9,2Gt

Mein Punkt ist im Kern: Ich denke du machst dir unnötig viel Arbeit, wenn du Umrechnungen von jedem Typ in jeden anderen manuell herunterschreibst. Such dir ein geeignetes Zwischenformat, in das du jeden Wert konvertierst, bevor du Vergleiche und Rechenoperationen durchführst. Das wird dir viel Schreibarbeit und viel Fehlerpotenzial ersparen. In meinem Beispiel war das Zwischenformat Gramm.

Evtl. ist es auch sinnvoll, einen Record mit Wert und Umrechnungsfaktor zu verwenden. Dadurch könntest du enorm große Zahlen vermeiden. Beispiel:

Delphi-Quellcode:
  TWeightValue = record
    Value: Integer;
    Factor: Integer;
  end;

  // ...
  var
    CarWeight, ContainerShipWeight, LoadedContainerShipWeight: TWeightValue;
  begin
    CarWeight.Value := 1500;
    CarWeight.Factor := 1000; // value in kg

    ContainerShipWeight.Value := 2000;
    ContainerShipWeight.Factor := 1000*1000; // value in tonnen

    LoadedContainerShipWeight:= ContainerShipWeight + (CarWeight * 500); // Schiff ist mit 500 Autos voll beladen

    Assert(LoadedContainerShipWeight.Value, 2750);
    Assert(LoadedContainerShipWeight.Factor , 1000*1000);
  end;
In dem Fall bräuchtest du nur einen Record-Typen und müsstest nur jeweils einen Operatoren für die Verwendung mit einem anderen TWeightValue und einem Integer schreiben. Das lässt sich dann auch deutlich einfacher testen.
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#4

AW: Unittests generieren ?

  Alt 8. Okt 2018, 20:42
Mir kommt das auch sehr aufwändig vor. Wir haben das so gelöst:
Tabelle mit Attributen (Einheit, nächst kleinere Einheit+Faktor, nächst größere Einheit+Faktor, Typ der Einheit)

Beispiel:

kg, g, 0.001, t, 1000, Gewicht
g, mg, 0.001, kg, 1000, Gewicht

Das geht für Volumen+Zeit etc gleichermaßen.


Will man eine Einheit in andere umrechnen, hangelt man sich der Kette entlang. Wenn man lustig ist, kann beim Rechnen je nach notwendiger Genauigkeit die Einheiten wechseln.
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Unittests generieren ?

  Alt 9. Okt 2018, 01:37
Bitte zurück zum Thema.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Unittests generieren ?

  Alt 9. Okt 2018, 05:56
Hallo,
willst Du eine bestmögliche Testabdeckung, bleibt dir nichts anderes übrig,
also bis zur Rente Tests zu schreiben.

1. Oder Du definierst dir eine minimal Testabdeckung von z.B. 50% und musst damit leben,
dass dir eventuell was hinten runterfällt.

2. Oder du definierst Dir Tests mit den Funktionen/Zugehörigkeiten die Du im Moment benutzt.
Ergebnis: wie 1.


Ich glaube nicht, dass es Programme gibt, die dir die Tests selber generieren.

Zur Vereinfachung: BigInt nehmen als gemeinsame Datenbasis (rechnet theoretisch alles aus, egal wie groß die Werte sind)
Heiko

Geändert von hoika ( 9. Okt 2018 um 05:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#7

AW: Unittests generieren ?

  Alt 9. Okt 2018, 06:59
Schreib dir einen Testgenerator, der den Code für die Tests erzeugt. Du hast jetzt ja eh schon jede Menge Boilerplate-Code. Bzw lass deine Klassen gleich den Code für die Tests erzeugen.

Oder: Deine Klassen sollen ihren Typ + ihre Operatoren in einer Liste registrieren. Aus dieser Liste erzeugst du dann (halbautomatisch) die Testfälle.

Off-topic: Wenn es so aufwändig ist, Testfälle zu schreiben, hapert´s am Design.
  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 11:53 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-2025 by Thomas Breitkreuz