問題タブ [property-based-testing]
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.
python - Hypothesis を使用したカスタム値制限付きリストのリストの生成
物語:
現在、次のルールを持つ整数のリストのリストを期待するテスト対象の関数があります。
- サブリストの数 ( と呼びましょう
N
) は 1 から 50 までです - サブリスト内の値の数は、すべてのサブリストで同じ (長方形の形式) であり、>= 0 および <= 5 である必要があります
- サブリスト内の値は、サブリストの総数以上にすることはできません。つまり、サブリスト内の各値は整数 >= 0 および <
N
有効な入力の例:
無効な入力の例:
私はプロパティベースのテストでそれにアプローチし、hypothesis
ライブラリでさまざまな有効な入力を生成しようとしていて、頭をラップしようとしてlists()
いintegers()
ますが、機能させることはできません:
- 条件 #1 は
lists()
andmin_size
およびmax_size
引数を使用して簡単にアプローチできます - 条件 #2 は以下でカバーされています
Chaining strategies together
- 条件#3は私が苦労しているものです-
rectangle_lists
上記の例を使用すると、内部の「親」リストの長さへの参照がありませんintegers()
質問:
サブリスト内の整数値をサブリストの総数よりも少なくするにはどうすればよいですか?
私の試みのいくつか:
これは要件を満たすにはほど遠いものでした。リストは厳密には長方形ではなく、生成された整数値は生成されたリストのサイズを超える可能性があります。
ここで、要件 #1 と #2 は満たされていましたが、整数値はリストのサイズよりも大きくなる可能性があります。要件 #3 は満たされていません。
python - 仮説の反証例をスキップする
物語:
私は現在、現在のソリューションを「壊す」ための特定の入力を見つけようhypothesis
とするカスタム生成戦略を使用して関数の単体テストを行っています。私のテストは次のようになります。
answer()
基本的に、関数が 0 または 1 または 2 を返さない場合に可能な入力を探しています。
現在のワークフローは次のようになります。
- テストを実行する
/li>hypothesis
を生成する入力を見つけますAssertionError
:この入力/出力が正当なものであり、関数が正しく機能したかどうかを理解しようとして、この特定の入力で関数をデバッグします
質問:
[[0], [1]]
この偽造生成された例 (この場合) をスキップして、別のものを生成するように依頼するにはどうすればよいhypothesis
ですか?
質問は次のように解釈することもできます:hypothesis
改ざんの例が見つかった場合に終了せず、代わりにさらに改ざんの例を生成するように依頼できますか?
scala - 無期限にぶら下がっている円形ジェネレーター
ファイルに一連の名前があります。それらを継続的に反復処理する Generator を実装する必要があります。ただし、コードはif (iter.hasNext)
最初のパスの後、無期限にハングします。
遺伝子コード
サンプル プロパティ テスト
en_US_sample.txt ファイルの内容
編集-一時的な作業コード
次のコードは、イテレータを再作成すると機能しますが、なぜIterator.continually
ハングしているのか疑問に思っていましたか?
unit-testing - FsCheck を使用して、プロパティ ベースのテストの入力として乱数を生成する方法
FsCheck を試してみようと思ったのですが、思ったより難しいことがわかりました。、ジェネレーターなどに関する多くのドキュメントArb
がありますが、その知識を適用する方法についてのガイダンスはないようです。または、私はそれを理解していません。
テスト、プロパティ、ジェネレーター、任意、シュリンク、そして私の場合はランダム性 (自動的にランダム データを生成するテストもあれば、生成しないテストもあります) との関係が明確ではないため、理解が難しくなっている可能性があります。私は Haskell のバックグラウンドを持っていないので、それもあまり役に立ちません。
ここで質問があります: ランダムな整数を生成するにはどうすればよいですか?
私のテストシナリオは、乗算の特性で説明できます。たとえば、分配性を考えてみましょう。
これを NUnit 統合で実行するとCheck.Verbose
、次のようなテスト シーケンスが得られます。
1000回のテストの後、それは乗り越えられませんでした100L
. どういうわけか、これが の全範囲に均等に分散された乱数を「自動的に」選択すると想像しint64
ました。少なくとも、それがドキュメントの解釈方法でした。
そうでないので、私は実験を開始し、より高い数値を得るために次のようなばかげた解決策を思いつきました:
しかし、これは信じられないほど遅くなり、明らかに正しいアプローチではありません。私が見逃している簡単な解決策があるに違いないと確信しています。で試しましGen.choose(Int64.MinValue, Int64.MaxValue)
たが、これは int のみをサポートし、long はサポートしていません (ただし、int だけでも機能しませんでした)。
最後に、すべてのプリミティブな数値データ型に対して機能するソリューションが必要です。これには、最大値と最小値、ゼロと 1、およびその中にあるものからのランダムな選択が含まれます。
f# - 関数のリストを受け取る関数をプロパティベースでテストするにはどうすればよいですか?
関数のリストを受け取る関数をプロパティベースでテストするにはどうすればよいですか?
次の関数を使用します。
追加のコンテキストは次のとおりです。
次のテストを試してみたところ、実行時に任意の関数が生成されているため、定義済みの関数が (明らかに) 使用されていないことに気付きました。
例:
私のプロパティテストは次のとおりです。
handleAll関数はプロパティベースでテスト可能ですか?