2016-09-22 3 views
2

を返す関数をモックするためにどのように私は、私はテスト目的でモックとしたい機能、ボイドタスク

public Task DoSomethingAsync(); 

を持っています。

このようなメソッドの戻り値を実装する正しい方法は何ですか。それはTask<int>か何かを返したい場合は、私はこれは、しかし、のawait演算子を欠いており、(少なくともReSharperのを)下線されます私は

public async void DoSomethingAsync() 
{ 
//implementation 
} 

行うことができますTask.FromResult<int>(5);

を使用します。

ここでタスクを返す正しい方法は何ですか?

答えて

5

すべてを行う必要がTaskと返すことです(驚きを!:-))Task<T>は、それがTaskあるTaskに由来します。このreferenceを参照してください。

だからbool(または何かを)返します:

return Task.FromResult(true);

ます。また、使用してcompletedTaskを返すことができます(注:

return Task.CompletedTask;

を:上記のみです.NET 4.6以降で利用可能)

+0

ありがとうございます! 'FromResult'は正常に動作します。私は 'Task.CompletedTask'を見つけることができません。私は 'using System.Threading;'と 'using System.Threading.Tasks'を使います。何か不足していますか? – Steffen

+0

'System.Threading.Tasks.Task.CompletedTask'は動作します(.NET 4.6)。 – Krumelur

+0

それは言う:ここで内部プロパティ 'CompletedTask'にアクセスすることはできません。 – Steffen

2

ターンTask.CompletedTask(.NET 4.6が必要)、または単にTask.FromResult(true)

アイデアは、ちょうどあなたが実装したいからかっている場合は、ちょうどあなたのクラスを使用するインターフェイスを作成し、Task

0

を返すことです:

public interface IDoStuff 
{ 
    Task DoSomethingAsync(); 
} 

public class MyDoStuff : IDoStuff 
{ 
    public Task DoSomethingAsync() 
    { 
     ... 
    } 
} 

次に、インタフェースIDoStuffでモックを作成し、メソッドをモックします。

+0

ありがとう。私の質問は別のものを目指しましたが、答えました! – Steffen