- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个 json 生成:
let strGen = Arb.Default.String()
|> Arb.toGen
strGen
|> Gen.arrayOf
|> Gen.map (String.concat "\", \"")
|> Gen.map (fun strs -> "[\"" + strs + "\"]")
如何在我的测试主体中创建 json
的 string
来断言最终结果。
最佳答案
我最初的答案是使用 Gen.map2
组合两个生成器,一个用于字符串数组,一个用于 json 字符串。但是 Gen.map2
是专门设计让两个独立生成器组合在一起的,即一个生成器的结果不会影响另一个。 (例如,掷两个骰子:第一个骰子的结果与第二个骰子的结果无关)。您需要的是一个简单的 Gen.map
,它采用字符串数组生成器并生成一个元组 (string array, json)。像这样:
let strGen = Arb.Default.String() |> Arb.toGen
let arrayGen = strGen |> Gen.arrayOf
arrayGen |> Gen.map (fun array ->
let json =
array
|> String.concat "\", \""
|> fun strs -> "[\"" + strs + "\"]")
array,json)
与我在下面结合了两个独立生成器的答案不同,这里只有一个生成器,其值用于生成两者数组和 json 值。所以这些值将是相关的而不是独立的,json 将始终匹配字符串数组。
原始的,不正确的,答案如下,保留以防两个答案之间的对比有用:
Easy. Just save the array generator, and re-use it later, using
Gen.map2
to combine the array and the json. E.g.:let strGen = Arb.Default.String()
|> Arb.toGen
let arrayGen = strGen |> Gen.arrayOf
let jsonGen =
arrayGen
|> Gen.map (String.concat "\", \"")
|> Gen.map (fun strs -> "[\"" + strs + "\"]")
Gen.map2 (fun array json -> array,json) arrayGen jsonGenAnd now you have a generator that produces a 2-tuple. The first element of the tuple is the string array, and the second element is the json that was generated.
BTW, your JSON-creating code isn't quite correct yet, because if the generated string contains quotation marks, you'll need to quote them in some way or your generated JSON will be invalid. But I'll let you handle that, or ask a new question about that if you don't know how to handle that. The "single responsibility principle" applies to Stack Overflow questions, too: each question should ideally be about just one subject.
关于f# - FsCheck如何生成元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48059352/
我是一名优秀的程序员,十分优秀!