Wie implementiere ich die Generierung mehrerer Argumente mit FsCheck?Wie implementiere ich die Generierung mehrerer Argumente mit FsCheck?
I implementiert folgende mehrere Argument Generation zu unterstützen:
// Setup
let pieces = Arb.generate<Piece> |> Gen.filter (isKing >> not)
|> Arb.fromGen
let positionsList = Arb.generate<Space list> |> Arb.fromGen
ich diese Argumente dann verwendet, um das Verhalten einer Funktion zu testen, die zur Erzeugung von Bewegung Optionen für einen bestimmten Prüfer verantwortlich ist:
// Test
Prop.forAll pieces <| fun piece ->
Prop.forAll positionsList <| fun positionsItem ->
positionsItem |> optionsFor piece
|> List.length <= 2
Verschachtelt Prop.forAll-Ausdrücke die richtige Technik beim Verwalten mehrerer generierter Argumenttypen?
Gibt es eine alternative Methode zum Generieren mehrerer Argumente für eine zu testende Funktion?
Hier ist die gesamte Funktion:
open FsCheck
open FsCheck.Xunit
[<Property(QuietOnSuccess = true)>]
let ``options for soldier can never exceed 2``() =
// Setup
let pieces = Arb.generate<Piece> |> Gen.filter (isKing >> not)
|> Arb.fromGen
let positionsList = Arb.generate<Space list> |> Arb.fromGen
// Test
Prop.forAll pieces <| fun piece ->
Prop.forAll positionsList <| fun positionsItem ->
positionsItem |> optionsFor piece
|> List.length <= 2
UPDATE
Hier ist die Lösung auf meine Frage, die von Mark Antwort:
[<Property(QuietOnSuccess = true, MaxTest=100)>]
let ``options for soldier can never exceed 2``() =
// Setup
let pieceGen = Arb.generate<Piece> |> Gen.filter (isKing >> not)
let positionsGen = Arb.generate<Space list>
// Test
(pieceGen , positionsGen) ||> Gen.map2 (fun x y -> x,y)
|> Arb.fromGen
|> Prop.forAll <| fun (piece , positions) ->
positions |> optionsFor piece
|> List.length <= 2
Dank Mark. Gibt es neben Blogs irgendwelche Bücher dazu? Ich suchte im Internet und konnte kein Nachschlagewerk finden. Daher würde ich gerne die Interna von Framework-basierten Test-Frameworks auf hoher Ebene verstehen, ohne ein FP-Guru zu sein. –
@ScottNimrod Ich kenne keine Bücher. –
[CEFP 2009 hat ein (bezahltes) Kapitel über QuickCheck, etwa 40 Seiten lang, geschrieben von John Hughes.] (Https://twitter.com/nikosbaxevanis/status/680704605819420672) –