2016-03-25 13 views
1

これは簡単なことです。ただし、以下のテストは常に通過します:プロパティベースのテストは、失敗すると予想したときに引き続き実行します。

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 

を私も試してみた:

Check.QuickThrowOnFailure <| (expected = actual) 

を具体的に、なぜこのテストでは、それは明らかに失敗する時に渡すために続けていますか?

答えて

2

あなたはまた、FsCheck.Xunitとその[<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

プロパティを作成していますが、実際にそのプロパティをチェックすることはありません。ただそこに座って、決して一度も実行されません。

プロパティを確認するには、あなたが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 
関連する問題