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
相关产品推荐
相关产品推荐

