AGB  ·  Datenschutz  ·  Impressum  







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

DUnitX und Arrays

Ein Thema von Ghostwalker · begonnen am 18. Sep 2017 · letzter Beitrag vom 18. Sep 2017
Antwort Antwort
Ghostwalker

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

DUnitX und Arrays

  Alt 18. Sep 2017, 10:35
moinmoin,

da ich recht neu bin in Sachen Unittests, hab ich einfach mal ein wenig rumgespielt damit. Dabei bin ich auf folgendes Problem gestoßen:

Delphi-Quellcode:
Type
  TCalcUnits = (cuHl,cuLiter,cuDez,cMil);
  TResultArray = array[TCalcUnit] of Int64;

function CalcUnits(avalue:int64):TResultArray;
Das is der zu testende Code. Soweit nix komplexes.

Delphi-Quellcode:
   :
   [Test]
   [TestCase('Test 1','1234;[1,2,3,4]',';')]
   [TestCase('Test 1','7832;[7,8,3,2]',';')]
   Procedure TestCalcUnits(const avalue:int64;expected:TResultArray);
   :
   Procedure TestClass.TestCalcUnits(const avalue:int64;expected:TResultArray);
   var
     realResult : TResultArray;

   begin
     realResult := CalcUnits(avalue);
     Assert.AreEqual(expected,realResult,'passed');
   end;
Der Testcode dazu, wie ich dachte, das es funktionieren sollte. Was es aber nicht tut.

expected ist immer (0,0,0,0). Ändere ich expected auf const/var schreit er, das die parameter vom gleichen
Type sein müssen.

Wie muss ich das angeben, das er expected korrekt befüllt ?
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: DUnitX und Arrays

  Alt 18. Sep 2017, 11:51
Ein "Workaround" wäre doch zunächst die ganz normal einen eigenen Test für diese exakten Ein- und Ausgaben zu machen, oder? Ich persönlich fände das auch übersichtlicher, vielleicht auch nur weil ich DUnitX nicht gewohnt bin und es weiterhin "klassisch" mit DUnit mache.

Siehe auch:
https://stackoverflow.com/questions/35009927/
und
https://stackoverflow.com/questions/35555128/

Anscheinend müsste man in DUnitX.Utils die vorgefertigen Konvertierungen anpassen, denn zumindest das [0,0,0,0] kann ich nachvollziehen, das statische Array scheint er nicht auflösen zu können.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

AW: DUnitX und Arrays

  Alt 18. Sep 2017, 11:56
Wird derzeit nicht unterstützt, kannst du aber einfach einbauen - gehe dazu in die DUnitX.Utils unit und füge diese Routine hinzu:

Delphi-Quellcode:
function ConvStr2Arr(const ASource: TValue; ATarget: PTypeInfo; out AResult: TValue): Boolean;
var
  lValue: string;
  lValues: TStringDynArray;
  lArrayData: TArrayTypeData;
  elType: PTypeInfo;
  tmp: TValue;
  i: Integer;
begin
  lValue := ASource.AsString;
  if Length(lValue) < 2 then
    Exit(False);
  if (lValue[1] <> '[') or (lValue[Length(lValue)] <> ']') then
    Exit(False);
  lValue := Copy(lValue, 2, Length(lValue) - 2);
  lValues := SplitString(lValue, ',');
  // todo: support multi dim arrays - assume one dim for now
  lArrayData := GetTypeData(ATarget).ArrayData;
  elType := lArrayData.ElType^;
  if Length(lValues) <> lArrayData.ElCount then
    Exit(False);
  TValue.Make(nil, ATarget, AResult);
  for i := 0 to lArrayData.ElCount - 1 do
  begin
    if not TValue.From(lValues[i]).TryConvert(elType, tmp) then
      Exit(False);
    AResult.SetArrayElement(i, tmp);
  end;
  Result := True;
end;
Außerdem musst du sie noch in das Conversions Array bei [tkUString,tkArray] eintragen.

P.S. Dann klappt das übrigens auch mit dem const.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (18. Sep 2017 um 12:00 Uhr)
  Mit Zitat antworten Zitat
Ghostwalker

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

AW: DUnitX und Arrays

  Alt 18. Sep 2017, 16:16
Danke Stevie, hat geklappt
Uwe
e=mc² or energy = milk * coffee²
  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 18:16 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