У меня есть этот тест fscheck nunit, который генерирует две записи, которые мне затем нужно обновить, чтобы обе записи всегда имели разные значения для свойства Direction.
[<Property( Verbose = true )>]
let ``calculate Net Worth 2`` (first:Bill,second:Bill) =
let owing = { first with Direction = Out }
let payCheck = { second with Direction = In }
let compositeBill = {
Bills = [| owing; payCheck |]
}
let netWorth = calculateNetWorth compositeBill
Assert.AreEqual(payCheck.Amount - owing.Amount,netWorth)
Я не хочу вручную устанавливать Direction = In или Direction = In , я хочу использовать генератор, чтобы указать это.
Как будет выглядеть такой генератор?
Я хочу, чтобы у меня остался такой код
[<Property( Verbose = true )>]
let ``calculate Net Worth 2`` (first:Bill,second:Bill) =
let compositeBill = {
Bills = [| owing; payCheck |]
}
let netWorth = calculateNetWorth compositeBill
Assert.AreEqual(payCheck.Amount - owing.Amount,netWorth)
Вот что я пробовал без везения
type BillsGen =
static member Bill () =
let debit =
Arb.generate<Bill>
|> Gen.map (fun dt -> { dt with Direction = Out} )
let credit =
Arb.generate<Bill>
|> Gen.map (fun dt -> { dt with Direction = In} )
Gen.oneof[ debit; credit ]
[<SetUp>]
let setup () =
do Arb.register<BillsGen>() |> ignore
Спасибо
Вот некоторые из моих типов
type Direction =
| In
| Out
type Bill = {
Direction : Direction
}
type CompositeBill = {
Bills : Bill []
}