2014-11-15 159 views
2

我的代碼在使用FsCheck時自動測試從-99到99的值。FsCheck測試更改用於測試的值的範圍

Check.Quick test 

在我的測試函數取整數值。

我想使用值從1到測試到4999

+2

想你可以完成它創建自己的發電機:https://fsharp.github.io/FsCheck/TestData.html爲 – Christian

+0

謝謝鏈接:-)修正它! –

+0

你應該刪除你的問題或擴大它,所以我們可以使它對未來的用戶有用,然後 – Carsten

回答

5

您可以使用Gen.elementsProp.forAll結合:

let n = Gen.elements [-99..99] |> Arb.fromGen 
let prop = Prop.forAll n (fun number -> 
    // Test goes here - e.g.: 
    Assert.InRange(number, -99, 99)) 
prop.QuickCheck() 

Gen.elements採取有效值的序列,並創建從該序列的均勻發生器。 Prop.forAll用該自定義生成器定義屬性。

您可以combine it with FsCheck's Glue Library for xUnit.net,這是我的首選方法:我

[<Property>] 
let ``Number is between -99 and 99``() = 
    let n = Gen.elements [-99..99] |> Arb.fromGen 
    Prop.forAll n (fun number -> 
     // Test goes here - e.g.: 
     Assert.InRange(number, -99, 99)) 
+1

另外考慮在這裏使用'Gen.choose' - 會更有效率(不分配整數列表)。但是'Gen.element'更直接地推廣到其他類型。 –

0

默認情況下,FsCheck生成1到100之間的整數,您可以通過提供配置對象來檢查改變這一點。

let config = { 
    Config.Quick with 
    EndSize = 4999 
} 
Check.One(config,test) 

EndSize指示所有測試都通過時用於上次測試的大小。 StartSize之間的大小線性增加,如果您希望生成從除1以外的某個值開始的範圍內的測試數據,您還可以設置EndSize。見type Config的實施https://github.com/fscheck/FsCheck/blob/master/src/FsCheck/Runner.fs

+0

這有點誤導。大小是一個正整數,它限制了正在生成的類型的大小 - 但每種類型都有自己的解釋大小的含義。對於'int'我來說,它意味着'abs(i)<= size'。對於一個列表,它意味着生成列表的最大長度。等 –