使用FsCheck(Haskell QuickCheck 测试库的 F# 版本)从C#生成测试,我发现随机字符串生成器不会生成空字符串。
using FsCheck.Fluent;
Spec.ForAny<string>(s => s != null).QuickCheck(); // always pass
此外,似乎没有按设计处理空字符串,但我没有设法从文档中确定它。例如,仅在两个字符串(其中一个为空)之间进行选择是行不通的:
var strings = Any.ValueIn<string>(null, "non-null string");
Spec.For(strings, s => true).QuickCheck(); // throws null ref exception
而字符串似乎是一种特殊情况,因为它处理的是定制对象,例如
class Thing {}
与空值混合时:
var objects = Any.ValueIn(null, new Thing());
Spec.For(objects, s => true).QuickCheck(); // pass