You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi DUnitX测试用例传递多组浮点数值问题求解

Delphi DUnitX传递多组浮点数测试用例的问题解决

我想把一组浮点数值传入Delphi DUnitX的测试用例,但设置分隔符的方案没生效。Test_Int测试里能拿到完整字符串并提取整数值,但作为可选参数的分隔符不起作用——这和单浮点数传递的情况不一样,导致没法成功传递包含多个实数的字符串。相关代码如下:

[Test]
[TestCase('Test_Int', '1,2,3,4,5,6', ';')]
procedure Test_Integer(const AValue1: String);

[Test]
[TestCase('Test_Floata', '1.5;2.4;3.4;5.6;7.0;8.0', ';')]
[TestCase('Test_Floatb', '1,5;2,4;3,4;5,6;7,0;8,0', ';')]
procedure Test_Floating(const AValue1: String);

procedure Test.Test_Floating(const AValue1: String);
begin
       xxxx:=AValue1   // 只能拿到第一个数值 :-( 
end;

问题根源

DUnitX的TestCase属性中,分隔符参数是用来拆分测试方法的多个参数,而非单个参数内部的多个值。你的Test_Floating方法只定义了一个String类型参数,所以不管设置什么分隔符,整个字符串都会被当成唯一一个参数传入,不会自动拆分内部的多个浮点数。

两种解决方案

方案1:修改测试方法为多浮点参数

如果每组测试用例的浮点数数量固定,可以直接把测试方法的参数改成多个Double类型:

[Test]
[TestCase('Test_Floata', '1.5;2.4;3.4;5.6;7.0;8.0', ';')]
// 若系统区域设置用逗号做小数分隔符,可写成'1,5;2,4;3,4;5,6;7,0;8,0'
[TestCase('Test_Floatb', '1,5;2,4;3,4;5,6;7,0;8,0', ';')]
procedure Test_Floating(const AVal1, AVal2, AVal3, AVal4, AVal5, AVal6: Double);
begin
  // 直接使用各个浮点参数即可
end;

注意:DUnitX解析浮点数时,会遵循系统区域设置的小数分隔符规则,测试用例字符串里的分隔符要和系统一致,否则无法正确转换。

方案2:保持单String参数,手动分割字符串

如果浮点数数量不固定,或者需要保留单参数形式,可在测试方法内部手动拆分字符串:

[Test]
[TestCase('Test_Floata', '1.5;2.4;3.4;5.6;7.0;8.0')]
[TestCase('Test_Floatb', '1,5;2,4;3,4;5,6;7,0;8,0')]
procedure Test_Floating(const AValueList: String);
var
  FloatList: TArray<String>;
  FloatVal: Double;
  S: String;
begin
  FloatList := AValueList.Split([';']); // 手动用分号拆分字符串
  for S in FloatList do
  begin
    // 根据需求转换字符串为浮点数,可指定格式兼容不同分隔符
    if TryStrToFloat(S, FloatVal) then
    begin
      // 处理每个浮点数
    end;
  end;
end;

这种方式不需要依赖TestCase的分隔符参数,完全由自己控制字符串的拆分逻辑。

内容的提问来源于stack exchange,提问作者Franz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:01:21