我试图使用FsCheck进行基于属性的测试,但我似乎不知道如何让FsCheck使用我注册的氏族。以下是生成域类型的代码:
module Flips.Gens
open Flips.Domain
open FsCheck
type Silly = {
Name : string
}
let SillyGen () =
gen {
let! NonEmptyString name = Arb.generate<NonEmptyString>
return { Name = name}
}
type Domain () =
static member ArbSillyGen () = Arb.fromGen (SillyGen ())下面是示例测试
module Flips.Tests
open Xunit
open FsCheck
open FsCheck.Xunit
open Flips.Gens
do Arb.register<Domain> () |> ignore
module Tests =
[<Property>]
let ``Silly Name is NonEmptyString`` (silly:Silly) =
let isNullOrEmpty = System.String.IsNullOrEmpty silly.Name
Assert.True(not isNullOrEmpty)我有两个问题:
Silly类型的名称是空的。Silly类型设置一个断点,但是它从未被击中,所以我无法弄清楚到底发生了什么。我以前曾在其他项目中这样做过,但出于某种原因,我碰到了一块砖墙。
发布于 2020-04-29 17:16:27
FsCheck + xunit以不同的方式处理仲裁。根据文档这里,我尝试以这样的方式运行测试:
模块测试=
[<Property(Arbitrary = [| typeof<Domain> |] )>]
let ``Silly Name is NonEmptyString`` (silly:Silly) =
let isNullOrEmpty = System.String.IsNullOrEmpty silly.Name
Assert.True(not isNullOrEmpty)您可以删除do Arb.register<Domain> () |> ignore
https://stackoverflow.com/questions/61506982
复制相似问题