2016-02-22 16 views
8

私が間違っていることや、moqやNUnitの問題であればトレーニングをしようとしています。私は石鹸のエンドポイントを呼び出すと、私のサービス参照は、同期メソッドと非同期メソッドの両方を生成しています。Moq非同期コールバックが複数のパラメータで失敗する

public async Task DoThisAsync(idnameobject myobj, int id) 
{ 
    await ws.DoSomethingAsync(myobj, id); 
} 

私はコールバックを返すために、私のMOQを設定していますので、私は私がして、Webサービスと呼ばれているパラメータをinteregateすることができます:私は作っていますコールは、のようになります。スタックトレース内のすべての情報が含まれていない私のメソッドを呼び出すときに私はnull参照の例外を取得し、この時点で

var callback = new idnameobject();  

wsMock 
.SetUp(w => w.DoSomethingAsync(It.IsAny<idnameobject>(), It.IsAny<int>()) 
.Callback<idnameobject, int>((obj, id) => callback = obj); 

await myservice.DoThisAsync(myobj, id); 

Assert.That(callback.Id, Is.EqualTo(myobj.Id)); 

:私のテストのようなものが見えます。私が持っているのはException thrown: 'System.AggregateException' in mscorlib.dllです。

奇妙なビットは、私が同期メソッドからコールバックを設定し、それを呼び出すためにメソッドを変更すると失敗しないということです。

1つのパラメータしか持たない非同期メソッドを呼び出すと、失敗しません。

私のテストのために私のメソッドを変更したくないと思っている人は、私に知らせてください。しかし、Webサービスを正しく呼び出すためのテストが理想的です。

答えて

20

ws.DoSomethingAsync()を嘲笑していますが、何も返さないように設定しています。 DoThisAsync()メソッドはnullを待つために失敗します。あなたはTask.CompletedTaskTask.FromResult(0)を置き換えることができます上記のあなたは、.NET 4.6を使用している場合

wsMock.SetUp(w => w.DoSomethingAsync(It.IsAny<idnameobject>(), It.IsAny<int>()) 
    .Callback<idnameobject, int>((obj, id) => callback = obj) 
    .Returns(Task.FromResult(0)); 

にあなたの設定コードを変更することで、これを修正したりすることができます。

+0

大きな説明と私の問題を修正しました。私はそれをあなたの答えとすることができれば幸いです。 – mikesigs

+0

申し訳ありませんが、これは私の質問に答えました。 – Tom

関連する問題