gpt4 book ai didi

unit-testing - DUnitX 从字符串到整数数组的转换

转载 作者:行者123 更新时间:2023-12-03 18:21:11 24 4
gpt4 key购买 nike

我的问题类似于this one ,但我不想传递一个集合,而是传递一个整数数组。

例如:

[TestCase('TestAdd','[1,2,3,4];[1,2,3,4]',';')]
procedure TestAdd(aValue, aResult: array of integer);

修改 DUnitX.Utils 似乎是最简洁的方法,但我不确定如何进行转换。我的主要问题是,它如何知道我特别需要一组整数? PTypeInfo 中有什么我可以利用的吗?

最佳答案

您不能使用开放数组,因为 RTTI 缺少代码来调用带有此类参数的方法(这些参数实际上是由引擎盖下的两个参数实现的)。所以你需要更改签名才能使用 TArray<T>或任何其他动态数组类型。

那么对 DUnitX.Utils 的修改就非常简单了——只需将这个函数添加到 tkUString->tkDynArray 的 Conversions 数组中(任何可能的优化都留给读者作为练习):

function ConvStr2DynArray(const ASource: TValue; ATarget: PTypeInfo; out AResult: TValue): Boolean;
var
s: string;
values: TStringDynArray;
i: Integer;
p: Pointer;
v1, v2: TValue;
elType: PTypeInfo;
begin
s := ASource.AsString;
if StartsStr('[', s) and EndsStr(']', s) then
s := Copy(s, 2, Length(s) - 2);
values := SplitString(s, ',');
i := Length(values);
p := nil;
DynArraySetLength(p, ATarget, 1, @i);
TValue.MakeWithoutCopy(@p, ATarget, AResult);
elType := ATarget.TypeData.DynArrElType^;
for i := 0 to High(values) do
begin
v1 := TValue.FromString(values[i]);
if not v1.TryConvert(elType, v2) then
Exit(False);
AResult.SetArrayElement(i, v2);
end;
Result := True;
end;

关于unit-testing - DUnitX 从字符串到整数数组的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35555128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com