問題タブ [fscheck]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
unit-testing - FsCheck を使用して、プロパティ ベースのテストの入力として乱数を生成する方法
FsCheck を試してみようと思ったのですが、思ったより難しいことがわかりました。、ジェネレーターなどに関する多くのドキュメントArb
がありますが、その知識を適用する方法についてのガイダンスはないようです。または、私はそれを理解していません。
テスト、プロパティ、ジェネレーター、任意、シュリンク、そして私の場合はランダム性 (自動的にランダム データを生成するテストもあれば、生成しないテストもあります) との関係が明確ではないため、理解が難しくなっている可能性があります。私は Haskell のバックグラウンドを持っていないので、それもあまり役に立ちません。
ここで質問があります: ランダムな整数を生成するにはどうすればよいですか?
私のテストシナリオは、乗算の特性で説明できます。たとえば、分配性を考えてみましょう。
これを NUnit 統合で実行するとCheck.Verbose
、次のようなテスト シーケンスが得られます。
1000回のテストの後、それは乗り越えられませんでした100L
. どういうわけか、これが の全範囲に均等に分散された乱数を「自動的に」選択すると想像しint64
ました。少なくとも、それがドキュメントの解釈方法でした。
そうでないので、私は実験を開始し、より高い数値を得るために次のようなばかげた解決策を思いつきました:
しかし、これは信じられないほど遅くなり、明らかに正しいアプローチではありません。私が見逃している簡単な解決策があるに違いないと確信しています。で試しましGen.choose(Int64.MinValue, Int64.MaxValue)
たが、これは int のみをサポートし、long はサポートしていません (ただし、int だけでも機能しませんでした)。
最後に、すべてのプリミティブな数値データ型に対して機能するソリューションが必要です。これには、最大値と最小値、ゼロと 1、およびその中にあるものからのランダムな選択が含まれます。
types - F#構文を使用してTypeを属性パラメータとして渡す方法は?
FsCheck は、Arbitrary
その NUnit 統合でカスタムを許可します。
この構文は機能しません。質問するのは少し恥ずかしい気がしますが、どうやらこれは以前は必要なかったようです: F# で型を属性パラメーターとしてどのように指定しますか? Microsoftはそれについて何も言っていませんし、Wikibooksプロジェクトもそうではありません。
注 1:Arbitrary
パラメータの型はType []
です。
f# - NUnit での FsCheck の使用: 任意の型の使用に関する例外の受信 (または: 属性で任意の型を使用する方法)
以前の質問で、Kurtは型の設定に関するFsCheck のこのコードを教えArbitrary
てくれました。
私は次のものを持っていますArbitrary
(免責事項:私は自分が何をしているのかわかりません...、まだFsCheckを理解するのが難しいことで有名ですが、私はそれを機能させることに夢中です)、それ自体は私が作成したものの単純化されたバージョンですついさっき:
そして、私はそれを指示どおりに使用します:
これにより、何かが不足しているという(やや希望に満ちた)エラーメッセージが表示されます。
その Github コードを振り返ってみると、2 つのAtrbitrary
クラスがありますが、どちらも継承されておらず、両方とも異なる静的メンバーを持っています。
乱数ジェネレーターを作成し、それを Arbitrary として静的に NUnit テストに割り当てるにはどうすればよいですか?
tdd - FsCheck プロパティ属性を使用するときに null 値を除外する方法は?
パラメータ (例: a string
) を受け取り、smth を実行する単純なメソッドを作成する必要があります。通常、私は2つのテストで終わります。最初のものはガード句です。2 番目は、予想される動作を検証します (簡単にするために、メソッドは失敗しないはずです)。
FsCheck [Property]
属性を使用してランダム データを生成しようとするnull
と、他の多数のランダム値がテストに渡され、ある時点で NRE が発生します。
これが、さまざまなケースをカバーするために多数のランダム データを生成するという FsCheck の全体的なアイデアであることを認識しています。これは間違いなく素晴らしいことです。
望ましくない値[Property]
を除外するように属性を構成するエレガントな方法はありますか? (この特定のテストでは、それは です)。null
random - FsCheck のアイテムの固定リストを使用してジェネレーターを作成する方法
私は当初、最初の 5 つの要素が修正されたジェネレーターを作成しようとしましたが (Prop.forAll
最初の 5 つを使用するテストでは常に実行されます)、失敗しました。
現在、範囲内のランダムデータ用に1つのジェネレーターと、非ランダムデータ用に1つのジェネレーター、つまり固定シーケンスを使用することで、これを簡素化しようとしています。に似てGen.constant
いますが、1 つの値ではなく一連の値である点が異なります。
私はこれを持っています(単純化された再現可能な例、NUnitとxUnitで動作します):
出力は次のとおりです(どこからnull
来たのかわかりません):
出力には、5 つのテストすべてを順番に、できれば順序どおりに含めたいと思います。testdata プロバイダーを使用して NUnit (または任意の単体テスト システム) でこれを実行できることはわかっていますが、FsCheck で実行できるかどうか (または、そうすべきかどうか、おそらくこれは悪い考えです) を考えています。
FsCheck を使用すると便利だと思います。関数の引数が複数ある状況では、与えられたコーナー ケースの引数のすべての組み合わせを徹底的にテストする必要があります。これは、testdata プロバイダーよりも FsCheck の方が簡単であることが期待されます。
c# - FsCheckでnull許容型のnullを生成する方法は?
動作しているように見えるこのジェネレーターがありますが、生成された値を確認すると、null 値が選択されることはありません。null値を選択するジェネレーターをどのように書き込みますか。このコードは、「終了」日の null 値を選択しません。