2016-03-25 19 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