我刚接触FsCheck,我需要一个json数组来执行我的测试。
我想要一个简单的解决方案,如下所示:
let commaSeparated = Gen.arrayOf Arb.generate<string>
|> Gen.fold(fun (acc,i)-> i+="\",\"")
|> Gen.finalValueOf
|> StringExtensions.skipLastChar
let result = Arb.from "[\"" + commaSeparated +"\"]"但主要的问题是我找不到Gen.fold和Gen.finalValueOf。
发布于 2018-01-02 02:04:41
我也不是FsCheck方面的专家,但我认为除了缺少的函数之外,您的代码中还存在一些奇怪的东西。StringExtensions.skipLastChar在做什么?我也不认为Gens可以和strings连接在一起,就像你在最后一行中尝试的那样。Gen.finalValueOf应该怎么做?
我使用Gen.map将字符串连接到逗号分隔的列表,并将结果括在括号中,让您的示例正常工作(不确定它是否完成了您需要的操作):
let jsonArray =
Arb.generate<string>
|> Gen.arrayOf
|> Gen.map (String.concat "\",\"")
|> Gen.map (fun strs -> "[\"" + strs + "\"]")
let result = Arb.fromGen jsonArray顺便说一下:我认为你需要考虑生成的双引号。如果您不避开它们,您的JSON解析器将会失败。下面是一个可以做到这一点的jsonArray版本:
let escapeDoubleQuotes (str:string) = str.Replace ("\"", "\\\"")
let jsonArray =
Arb.generate<string>
|> Gen.arrayOf
|> Gen.map (Array.map escapeDoubleQuotes)
|> Gen.map (String.concat "\", \"")
|> Gen.map (fun strs -> "[\"" + strs + "\"]")https://stackoverflow.com/questions/48043139
复制相似问题