ReturnsAsync(null)
Visual Studio の C# ユニット テスト メソッドで を使用すると( を使用Moq
)、次のエラーが発生します。
「次のメソッドまたはプロパティ間の呼び出しがあいまいです」
そして、ReturnsAsync
異なるパラメータを持つメソッドのリストが表示されます。これは関数がオーバーロードされているためだと理解していますReturnsAsync
。しかし、同僚のコンピューターで同じユニット テストを実行すると、エラーなしで実行されます。なぜこのようなことが起こるのか、誰か知っていますか? これを修正する方法を知っている人はいますか?
また、ビルド時に次のような警告が表示されます:
******** を参照するすべてのパッケージは、nuget パッケージ Microsoft.Bcl.Build をインストールする必要があります。
それは何か効果があるのでしょうか?
ベストアンサー1
ReturnsAsync
MoqReturnsExtensions
クラスには2 つの拡張メソッドがあります。次のパラメーターがあります。
(this IReturns<TMock, Task<TResult>> mock, TResult value)
(this IReturns<TMock, Task<TResult>> mock, Func<TResult> valueFunction)
ご覧のとおり、1 つはタスクによって返される値を受け入れ、もう 1 つは値を返すデリゲートを受け入れます。null
コンパイラに渡すとき、それが値かデリゲートかはわかりません。タスク パラメータが値型 (例: int) の場合は当てはまりません。これは、null にできず、コンパイラは null がデリゲートであると理解するためです。おそらく、同僚のコンピュータの場合はそうでしょう。
このエラーを修正するには、コンパイラが正しいメソッド オーバーロードを選択できるようにする必要があります。つまり、null をタスクの結果の型 (例: 文字列) にキャストします。
RetursAsync((string)null)
またはnullの値を渡すこともできます
string s = null;
... ReturnsAsync(s);