我是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
。
答案 0 :(得分:2)
我也不是FsCheck的专家,但我认为除了缺少的功能之外,你的代码中还有一些奇怪的东西。什么是StringExtensions.skipLastChar
在做什么?此外,我不认为Gen
可以与string
串联,就像你在最后一行中所尝试的那样。什么是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 + "\"]")