我正在尝试用fscheck实现生成器和收缩器,这将产生两个字符串,而不是空字符串,并且彼此不一样。为此,我使用以下代码:
let nonWhiteSpaceString s =
not (String.IsNullOrWhiteSpace s) && not (String.exists ((=) '\000') s)
type DifferentNonWhiteSpace = | DifferentNonWhiteSpace of NonWhiteSpaceString*NonWhiteSpaceString
type DifferentNonWhiteSpaceGen =
static member DifferentNonWhiteSpace() =
let generator =
generate<String>
|> Gen.two
|> Gen.filter (fun (a,b) -> nonWhiteSpaceString a && nonWhiteSpaceString b && a<>b )
|> Gen.map (fun (a,b) -> DifferentNonWhiteSpace((NonWhiteSpaceString a),NonWhiteSpaceString(b)))
let shrinker (DifferentNonWhiteSpace(a,b)) =
let seqA = a.Get.ToCharArray()
|> shrink
|> Seq.map String
b.Get.ToCharArray()
|> shrink
|> Seq.map String
|> Seq.map2 (fun x y -> if x <> y then Some(DifferentNonWhiteSpace(NonWhiteSpaceString x,NonWhiteSpaceString y)) else None) seqA
|> Seq.choose id
fromGenShrink (generator,shrinker)我在测试中使用它,如下所示:
testProperty "calculate Xml against different Prefix should produce youpi" <| fun (DifferentNonWhiteSpace(prefix1,prefix2)) ->
let xml1 = createXml <| changePrefix prefix1
let xml2 = createXml <| changePrefix prefix2
let actual = calculate xml1 xml2
Expect.equal actual Youpi "return youpi"生成器似乎没问题,但收缩器并没有我所期望的那样:
在1次测试后失败。参数: DifferentNonWhiteSpace (NonWhiteSpaceString "K",NonWhiteSpaceString "▲")收缩3次至:DifferentNonWhiteSpace (NonWhiteSpaceString "a",NonWhiteSpaceString "a")结果: Exception Expecto.AssertException: Result。
在缩水的数据中,我不应该有相同的值:
DifferentNonWhiteSpace (NonWhiteSpaceString "a",NonWhiteSpaceString "a")
有人能指出我做错了什么吗?
谢谢
编辑实际上,我也有问题的发电机。
Failed after 11 tests. Parameters:
DifferentNonWhiteSpace (NonWhiteSpaceString "v",NonWhiteSpaceString "v")
Result:
Exception
Expecto.AssertException: return Bouh.很奇怪..。
发布于 2020-06-08 10:54:33
Thx给Kurt Schelfthout的评论,我忘了用
testPropertyWithConfig config ....而不是
testProperty ....为了使用我的自定义仲裁员:
let config =
{
FsCheckConfig.defaultConfig with
arbitrary=
[
typeof<DifferentNonWhiteSpaceGen>
]
}https://stackoverflow.com/questions/62197211
复制相似问题