2016-03-25 1 views
1

Je suis sûr que c'est trivial. Cependant, le test suivant toujours passer:Le test basé sur la propriété continue à passer quand je m'attends à ce qu'il échoue

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 

J'ai aussi essayé:

Check.QuickThrowOnFailure <| (expected = actual) 

Plus précisément, pourquoi ce test ne continue à passer quand il doit évidemment échouer?

Répondre

2

Vous pouvez également utiliser FsCheck.Xunit et son attribut [<Property>]:

[<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

Vous créez la propriété, mais vous ne la contrôlez jamais. Il se trouve juste là, jamais exécuté une fois.

Pour vérifier la propriété, vous devez passer à l'une des méthodes Check.*:

[<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