問題タブ [python-hypothesis]
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
改ざんの例が見つかった場合に終了せず、代わりにさらに改ざんの例を生成するように依頼できますか?
python - 仮説による無作為抽出
仮説には、以下に対応するsampled_from()
戦略がありrandom.choice()
ます。
random.sample()
しかし、シーケンスから長さ N のサブシーケンスを生成するような戦略を持つ方法はありますか?
python - Python仮説 - 多くのテストに対して一度戦略を構築しますか?
私は複合的な、構築するのに費用がかかりますが、テストするのは安価な戦略を持っています。私は実行する必要があります:
サンプルをビルドするのに約 4 秒かかり、アサートを実行するのにかかる時間はごくわずかです。
ベスト プラクティスでは、これらのテストを分離する必要があります。
仮説戦略をどのように組み合わせることができるかは明確ではありません。TestCase.setUp または pytest セッション スコープのフィクスチャ。フィクスチャを装飾することも、で呼び出すx = expensive_strategy(); @given(x)
ことも役に立ちません。