問題タブ [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.
f# - プロパティ ベースのテスト スイートに構成を適用するにはどうすればよいですか?
プロパティ ベースのテスト スイートに構成を適用するにはどうすればよいですか?
私は次のことを試しました:
ただし、Config
メンバーはプライベートに設定されており、コンパイルされません。
助言がありますか?
f# - 複雑なケースで縮小を利用する方法
FsCheck を使い始めたばかりです。いくつかのテスト データを生成する必要があります。ここでTestData
は、テストへの入力を表します。
私の生成コードは次のようになります。
したがって、これは機能しArb.Default.Blabla().Generator
ますが、サイズパラメーターを渡すことができないため、テストで縮小を利用できないため、への呼び出しは好きではありません。たとえば、 を に縮小しFrob option
たりNone
、より単純な を選択したりしstartTime
ます。このような単一の値を生成するときに、そのサイズ パラメータを伝播する方法はありますか? - また、ひどい初心者の間違いを指摘していただきありがとうございます。私は本当にこの API の使用方法を理解しようとしています。
f# - 逆方向パイプライン演算子を使用するとコンパイル エラーが解決されるのはなぜですか?
次の行は、コンパイラによって受け入れられます。
ただし、後方パイプライン演算子を括弧に置き換えると、次のエラーが表示されます。
型の不一致。Arbitrary を期待 -> 'a が与えられた ('b -> 'c) -> プロパティ タイプ 'Arbitrary' はタイプ ''a -> 'b と一致しません
このエラーの意味がよくわかりません。逆方向パイプライン演算子はコンパイルされるのに、括弧がコンパイルされないのはなぜですか?
付録:
unit-testing - F# の nan 値に対するプロパティ テストの簡潔で一般的な方法は何ですか?
FsCheck を使用して F# でいくつかのプロパティ テストを行っています。したがって、入力引数に関係なく、特定の条件が常に成立することを保証したいと思います。
値に対して自明な恒等関数を定義するとしfloat
ます。
次に、常に保持する必要があるとわかっているこの関数のテストを定義します。
これは簡単なテストです。float ID 関数を呼び出すと、入力された float と同じ値が返されることを確認しているだけです。
次に、この関数を FsCheck にプラグインします。
残念ながら、このプロパティ テストは失敗します。
もちろん、振り返ってみると、これが起こることは明らかでしたnan <> nan
。
F# の構造的な比較により、これは、コレクションを含む (わずかに) より複雑なテスト ケースでも問題になる可能性があります。
float リストに対して同様の関数を設計すると、次のようになります。
また同じ問題!
明らかに、独自の等値テスト関数を作成することでこの問題を回避できます。これは値には問題ありませんが、カスタム等値関数で使用を開始し、一般にコードを個々のコレクション型に特化する必要がfloat
あるため、コレクションに拡張するのはより複雑になります。 .list
List.forall2
F# でこの問題を解決する一般的な方法はありますか?
f# - 2 つの Arbitrary インスタンスを組み合わせてテスト メソッドのシグネチャと一致させる方法
テスト用に 2 つの実際のパラメーターを取得する関数があります。両方の値は、完全に恣意的であることができない適切な形式である必要があるため、Arbitrary インスタンスによって作成されます。
だから私は次のコードを作成します
しかし、これら 2 つの Arbitrary インスタンスを結合して、テスト メソッドのシグネチャと一致させるにはどうすればよいでしょうか?
f# - モデルベースのテストが機能しない
演習として、2 ~ 3 本のフィンガー ツリーを実装したいと考えました。これは、 FsCheckのモデルベースのテストを試す絶好の機会です。新しい実験版を試すことにしました。
これまでのところ、テスト マシン用のコマンドを 1 つだけコーディングしました。完全なコードはGitHubで入手できます。
私が理解しているのは、単一の要素を持つ 1 つから 1 つOperation<_>.Run
を構築するために 2 回実行されるということです。ResizeArray
その後Operation<_>.Check
、同じ番号で 2 回実行され、1 つの要素に挿入されますFingerTree<_>
。
2 つのパスの最初のパス。単一要素ツリーを追加すると、最初のコマンドの後のモデルとよく比較される (正しい) 2 要素ツリーになります。
2 番目のコマンドは常に失敗します。Check
より大きなResizeList
(現在は 3 つの要素) で呼び出されますが、最初のコマンドと同じ単一要素の Tree です。もちろん、要素をもう 1 つ追加してもサイズ 3 にはならず、テストは失敗します。
Check
コマンドを実行するには、更新されたモデルを から返す必要があると予想していました。ただし、 a を返す必要があるProperty
ため、それは不可能です。
これにアプローチする方法を完全に誤解しましたか?動作するモデルベースのテストはどのように作成する必要がありますか?
c# - F# で xUnit と FsCheck を使用したメソッドによって例外がスローされたかどうかを確認する方法
xUnit と FsCheck を使用して F# で記述されたテストを使用して、C# で Diamond Kata を実行しています。 t 発音記号のないアルファベット)。コードは次のようになります。
テストされているメソッド:
テスト:
私のアプローチの問題は、テストでは例外がスローされないと示されていますが、テストスイートによって表示された入力でアプリケーションを実行すると、例外が発生することです。
テスト スイートによって表示されるメッセージは次のとおりです (意図的にテスト名とスタック トレースを省略しました)。
テスト スイートは値に対して')'
例外がスローされないと言っていますが、手動でテストを行ったところ、予想される例外が実際にスローされました。
例外がテストによってキャッチされることを確認するにはどうすればよいですか?
f# - Xunit で FsCheck を実行する方法
こんにちは、次の例外を使用してFsCheck.Xunit
テストを実行しようとしています:xunit.runner.console
私はMark Seemann の話を追おうとしています。私のセットアップは次のとおりです。
2 つのファイルを持つ単一のライブラリ タイプのプロジェクトがあります。1 つはテストするコードを含み、もう 1 つはテスト コードを含みます。プロジェクトは問題なくコンパイルされます。私は VS IDE を使用していませんが、F# 用の Ionide プラグインを備えた VSCode テキスト エディターのみを使用しています。
FSharp.Core
のバージョン指定の有無にかかわらず、ナゲットのインストールの有無にかかわらず、さまざまなセットアップを試しましFSharp.Core
た。
さらにどこを見るべきか考えはありますか?アイデアが枯渇し、イライラしています。私はすでにこれに2日を費やしました。:)
f# - fscheck はランダムな十分なデータを生成しません
私は FsCheck で遊んでいるので、この実装があります:
...そしてこの FsCheck ベースのテスト:
そして、テストは決して失敗しません。私の推測では、ランダム ジェネレーターによって生成される 100 個の値は 100 より大きくなることはありません。
値はもっと「ランダム」であるべきではありませんか?