2016-03-25 6 views
1

Ich bin mir sicher, dass das trivial ist. Allerdings wird der folgende Test immer passieren:Eigenschaftsbasierter Test läuft weiter, wenn ich erwarte, dass er fehlschlägt

let transform number = 
    match number % 3, number % 5 with 
    | 0, 0 -> "FizzBuzz" 
    | _, 0 -> "Buzz" 
    | 0, _ -> "Fizz" 
    | _ -> number.ToString() 

[<Fact>] 
let ``FizzBuzz.transform returns FizzBuzz``() = 
    let fiveAndThrees = Arb.generate<int> |> Gen.map ((*) (3 * 5)) 
              |> Arb.fromGen 

    Prop.forAll fiveAndThrees <| fun number -> 

     let actual = transform number 

     let expected = "jbdhjsdhjdsjhsdglsdjlljh" 
     expected = actual 

Ich habe auch versucht:

Check.QuickThrowOnFailure <| (expected = actual) 

Insbesondere warum dieser Test bestehen weiterhin, wenn es offensichtlich scheitern sollte?

Antwort

2

Sie auch FsCheck.Xunit und seine [<Property>] Attribut verwenden:

[<Property(QuietOnSuccess = true)>] 
let ``FizzBuzz.transform returns FizzBuzz``() = 
    let fiveAndThrees = 
     Arb.generate<int> |> Gen.map ((*) (3 * 5)) |> Arb.fromGen 
    Prop.forAll fiveAndThrees <| fun number -> 

     let actual = FizzBuzz.transform number 

     let expected = "FizzBuzz" 
     expected = actual 
4

Sie erstellen die Eigenschaft, überprüfen sie aber nie. Es sitzt nur dort, nie einmal ausgeführt.

die Eigenschaft zu überprüfen, müssen Sie es auf einer der Check.* Methoden weitergeben müssen:

[<Fact>] 
let ``FizzBuzz.transform returns FizzBuzz``() = 
    let fiveAndThrees = Arb.generate<int> |> Gen.map ((*) (3 * 5)) 
              |> Arb.fromGen 

    let myProperty = Prop.forAll fiveAndThrees <| fun number -> 

     let actual = transform number 

     let expected = "jbdhjsdhjdsjhsdglsdjlljh" 
     expected = actual 

    Check.QuickThrowOnFailure myProperty