問題タブ [fsunit]

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.

0 投票する
2 に答える
149 参照

f# - fsunit のスコープとインデント

fsunit テストでインデントを正しく取得できないようです。ML スタイルの「use let ... in」を使用するように言われ続けていますが、それを行うと、コンパイラが次のテストの名前を読み取るのに問題が発生することになります。助言がありますか ?

0 投票する
2 に答える
2496 参照

f# - FsUnit で例外を適切にテストする方法

FsUnit で例外を適切にテストする方法を見つけようとしています。公式ドキュメントには、例外をテストするには、次のようなものを修正する必要があると記載されています。

[<ExpectedException>]しかし、テスト メソッドを属性でマークしないと、常に失敗します。例外をテストしたい場合は、C# + NUnit でそのような属性を追加する必要があるため、合理的に聞こえます。

ただし、この属性を追加している限り、スローしようとしている例外の種類は問題ではなく、常に処理されます。

いくつかのスニペット: My LogicModule.fs

私の LogicModuleTest.fs

0 投票する
4 に答える
2790 参照

f# - FsUnitで判別共用体の場合を確認するには?

値が判別共用体の特定のケースであることを確認したいのですが、含まれているデータも確認する必要はありません。私の動機は、各単体テストで 1 つのことだけをテストすることです。

例は次のとおりです (最後の 2 行でコンパイル エラーが発生します)。

これは FsUnit で実行できますか?

私はこの答えを知っていますが、ケースごとに一致する関数を記述する必要はありません (私の実際のコードでは、2 つ以上あります)。

0 投票する
1 に答える
132 参照

unit-testing - Linux で Mono を使用して FsUnit をセットアップするにはどうすればよいですか?

Visual Studio がないと、NuGet を使用できません。FsUnit を手動で使用するようにプロジェクトをセットアップするにはどうすればよいですか?

0 投票する
1 に答える
220 参照

unit-testing - FsUnit - 値またはコンストラクターが「すべき」は定義されていません

わかりましたので、FsUnit を調べて、いくつかの F# コードのテストを開発しています。また、 GitHubでサンプルの BowlingGame.fsx を見ています。

最初のテストを受けるには:

コンパイラ エラーとともに、should の下に赤い波線が表示されます。

助言がありますか?

編集:以下に完全なソースコードを追加。

0 投票する
1 に答える
405 参照

f# - コンストラクターでの fsunit.xunit テスト例外

持つ

FsUnit + xUnitを使用してこの例外をテストしようとしています:

しかし、実行するとXUnit.MatchExceptionが表示されます。私が間違っているのは何ですか?

  1. ソースコードのテスト
  2. カテゴリ タイプのソース コード
0 投票する
2 に答える
872 参照

f# - FsUnit `should equal` が `Some []` で失敗する

この FsUnit テストを NUnit 2.6.3 で実行すると、

私は得る:

メッセージの Expected と Actual が同じであっても、テストは失敗します。どうしたの?

0 投票する
1 に答える
592 参照

unit-testing - F# と NUnit: テスト失敗時のレコード型の構造化出力

Visual Studio 2013 内で Resharper のテスト ランナーを使用して F# コードをユニット テストするために NUnit を使用しています。

次のようなテストケースを(FSUnitを使用して)書くと:

「Expected: MyNamespace.MyRecord but found: MyNamespace.MyRecord」という行に沿って、非常に役に立たない出力メッセージが表示されます。

問題はもちろん、NUnit が明らかobject.ToString()に出力メッセージを生成するために使用していることですが、sprintf "%A" object代わりに、"Expected: { A = 77; B = 99} but found: { A = 4; B = 7}".

ToString次のように、すべてのレコードおよび判別共用体タイプを上書きできることを知っています。

ただし、これにより、テスト目的のみに必要なコードで型定義が乱雑になり、このコードをすべての型定義にコピーして貼り付けるときに、繰り返し禁止の原則に多少違反します。また、F# 3.1 では、型拡張にオーバーライド メンバーを追加することは非推奨になっていることにも注意してください。

古い質問

問題は、明示的にオーバーライドせずに失敗した NUnit テストの構造化された出力を取得する方法はありますToStringか? NUnit 用のプラグイン メカニズムはありますか? 私はNUnitのソースをチェックしましたが、それを行うための明白な方法やサポートされている方法はないようです。ソリューションは高速である必要はありません。結局のところ、コードは失敗した単体テストでのみ実行されます。ただし、これは一般的であり、コードを変更することなく、将来追加されるすべての F# レコードおよび判別共用体型で機能する必要があります。ありがとう。

新しい質問

Mark Seemann がコメントで指摘したように、Unquote ライブラリは、構造化されていない出力に問題がない代替手段です。そこで、FSUnit を Unquote に置き換えます。ただし、Unquote にはもう 1 つの問題があります。F# のリフレクション ライブラリを使用して、判別共用体を評価および削減します。どうやら、リフレクションは別のライブラリで定義された内部型を処理できないため、すべての単体テストが例外で失敗します。回避策は、すべてのタイプを公開することですが、これは明らかに理想的ではありません。

だから私のセットアップは次のとおりです。テストする必要がある内部型を含むライブラリ。そのライブラリはInternalsVisibileTo属性を使用して、その内部をテスト アセンブリから見えるようにします。テストが実行されると、Unquote は F# のリフレクションを使用しますが、これは内部型を正しく反映できないようです。

別の既知の回避策はありますか?

0 投票する
2 に答える
1398 参照

f# - f# のパラメーター化されたテスト - これは有効な定数式ではありません

なんらかの理由で、属性を介してテストに引数を渡すとTestCase、最初の引数 (この場合は配列) に関する次のエラー メッセージが表示されます。

これは有効な定数式またはカスタム属性値ではありません

しかし、属性とメソッド自体の両方から最後の引数を削除すると、すべて正常に機能します。

私は何を間違っていますか?できればタプルも定義したいのですint * intが、どちらもうまくいかないようです。