最初に5つの要素が固定されているジェネレータを作成しようとしましたが(最初の5つが常に実行されるProp.forAll
を使用するテストでは) 。FsCheckの項目リストを固定してジェネレータを作成するには
ここでは、範囲内のランダムデータ用の1つのジェネレータと、非ランダムデータ用の1つのジェネレータ(固定シーケンス)を使用することで、これを簡略化しようとしています。 1つの値の代わりに一連の値である点を除いて、Gen.constant
に似ています。
私はこの(簡易再現可能な例、NUnitのとxUnitフレームで動作します)があります。
[<Property(Verbose = true, MaxTest=5)>]
static member MultiplyIdentityCornerCases() =
Gen.elements [0L; -1L; 1L; Int64.MinValue; Int64.MaxValue]
|> Arb.fromGen
|> Prop.forAll <| fun x -> x = x * 1L
出力(null
から来て全く分から)ではありません:私が好きな
0:
<null>
9223372036854775807L
1:
<null>
-9223372036854775807L
2:
<null>
-9223372036854775807L
3:
<null>
1L
4:
<null>
-9223372036854775807L
Ok, passed 5 tests.
をシーケンス内の5つのテストのすべてを含む出力、好ましくは必ずしもそうではないが、順番に出力される。私はtestdataプロバイダを使ってNUnit(または任意のユニットテストシステム)でこれを行うことができますが、私はFsCheckでそれを行うことができるかどうか、あるいは私はそれが悪い考えであるかどうかは疑問です。
私はFsCheckを使うと便利です。複数の関数引数がある状況については、私が与えたコーナーケースの引数のすべての組み合わせを網羅的にテストしたいと思います。これは、FsCheckがtestdataプロバイダよりもうまくいけば簡単です。
これを修正する方法の1つは、おそらくナンバージェネレータの非ランダム性を使用しているか(またはその仕方を確認してください)、それが動作するのに必要な方法で正確に動作するように見えます(FsCheck出力私の[以前の質問](http://stackoverflow.com/questions/40923916/how-to-use-fscheck-to-generate-random-numbers-as-input-for-property-based-testin?rq = 1)) – Abel