[解決済み] Moqにタスクを返すように指示するにはどうしたらいいですか?
2022-03-22 22:51:30
質問
を宣言したインタフェースがあります。
Task DoSomethingAsync();
テストにMoqFrameworkを使用しています。
[TestMethod()]
public async Task MyAsyncTest()
{
Mock<ISomeInterface> mock = new Mock<ISomeInterface>();
mock.Setup(arg => arg.DoSomethingAsync()).Callback(() => { <my code here> });
...
}
そして、テストでは、以下のコードを実行します。
await DoSomethingAsync()
. そして、テストはその行でちょうど失敗します。私は何を間違えているのでしょうか?
どうすればいいですか?
あなたのメソッドにはコールバックがないため、このメソッドに
.CallBack()
. を使用して、必要な値でタスクを返すことができます。
.Returns()
と
タスク.フロムリザルト
, 例:
MyType someValue=...;
mock.Setup(arg=>arg.DoSomethingAsync())
.Returns(Task.FromResult(someValue));
2014-06-22更新
Moq 4.2には、これを支援するための新しい拡張メソッドが2つあります。
mock.Setup(arg=>arg.DoSomethingAsync())
.ReturnsAsync(someValue);
mock.Setup(arg=>arg.DoSomethingAsync())
.ThrowsAsync(new InvalidOperationException());
2016-05-05更新
でセス・フラワーズが言及しているように
その他の回答
,
ReturnsAsync
を返すメソッドでのみ利用可能です。
Task<T>
. タスクのみを返すメソッドの場合。
.Returns(Task.FromResult(default(object)))
が使用できます。
で示したように
本解答
.NET 4.6では、これは次のように簡略化されています。
.Returns(Task.CompletedTask);
, 例:
mock.Setup(arg=>arg.DoSomethingAsync())
.Returns(Task.CompletedTask);
関連
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] 辞書を繰り返し使用するには?
-
[解決済み] Moqでメソッドが呼び出されていないことを確認する方法は?
-
[解決済み] 匿名クラスはインターフェースを実装できますか?
-
[解決済み】Moqで1回目と2回目の戻り値が違う件
-
[解決済み】Moqを使用してユニットテストの非同期メソッドをモック化する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み】Nullableオブジェクトは値を持たなければならない?