首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FsCheck未使用注册Arbs/Gens

FsCheck未使用注册Arbs/Gens
EN

Stack Overflow用户
提问于 2020-04-29 16:41:56
回答 1查看 162关注 0票数 0

我试图使用FsCheck进行基于属性的测试,但我似乎不知道如何让FsCheck使用我注册的氏族。以下是生成域类型的代码:

代码语言:javascript
复制
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 ())

下面是示例测试

代码语言:javascript
复制
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)

我有两个问题:

  1. 看来FsCheck并没有使用我提供的生成器,因为它生成的Silly类型的名称是空的。
  2. 我尝试在gen中为Silly类型设置一个断点,但是它从未被击中,所以我无法弄清楚到底发生了什么。

我以前曾在其他项目中这样做过,但出于某种原因,我碰到了一块砖墙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-29 17:16:27

FsCheck + xunit以不同的方式处理仲裁。根据文档这里,我尝试以这样的方式运行测试:

模块测试=

代码语言:javascript
复制
[<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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61506982

复制
相关文章

相似问题

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