Я пытаюсь использовать 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)
У меня две проблемы:
Не похоже, что FsCheck использует предоставленные мной генераторы, потому что он генерирует Silly
типов с пустым именем.
Я пытаюсь установить точку останова в гене для тип Silly
, но он никогда не срабатывает, поэтому я не могу понять, что происходит.
Я делал это раньше в других проектах, но по какой-то причине я ударяя кирпичную стену.