首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过FsCheck生成Json数组

通过FsCheck生成Json数组
EN

Stack Overflow用户
提问于 2017-12-31 22:09:02
回答 1查看 143关注 0票数 3

我刚接触FsCheck,我需要一个json数组来执行我的测试。

我想要一个简单的解决方案,如下所示:

代码语言:javascript
复制
let commaSeparated =  Gen.arrayOf Arb.generate<string> 
                      |> Gen.fold(fun (acc,i)-> i+="\",\"")
                      |> Gen.finalValueOf
                      |> StringExtensions.skipLastChar
let result = Arb.from "[\"" + commaSeparated +"\"]"

但主要的问题是我找不到Gen.foldGen.finalValueOf

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-02 02:04:41

我也不是FsCheck方面的专家,但我认为除了缺少的函数之外,您的代码中还存在一些奇怪的东西。StringExtensions.skipLastChar在做什么?我也不认为Gens可以和strings连接在一起,就像你在最后一行中尝试的那样。Gen.finalValueOf应该怎么做?

我使用Gen.map将字符串连接到逗号分隔的列表,并将结果括在括号中,让您的示例正常工作(不确定它是否完成了您需要的操作):

代码语言:javascript
复制
let jsonArray = 
    Arb.generate<string>
    |> Gen.arrayOf  
    |> Gen.map (String.concat "\",\"")
    |> Gen.map (fun strs -> "[\"" + strs + "\"]")

let result = Arb.fromGen jsonArray

顺便说一下:我认为你需要考虑生成的双引号。如果您不避开它们,您的JSON解析器将会失败。下面是一个可以做到这一点的jsonArray版本:

代码语言:javascript
复制
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 + "\"]")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48043139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档