2016-09-22 45 views
2

我有一個函數如何嘲笑函數返回void任務

public Task DoSomethingAsync(); 

,我想嘲笑用於測試目的。

什麼是實現這種方法的返回值的正確方法。如果將返回Task<int>什麼的,我會用Task.FromResult<int>(5);

我能做

public async void DoSomethingAsync() 
{ 
//implementation 
} 

然而,這缺少的await操作,將(與ReSharper的至少)有下劃線。

什麼是在這裏返回任務的正確方法?

回答

5

所有你需要做的是返回一個Task和(驚喜!:-))Task<T>派生從Task它是一個Task。看到這個reference

所以只返回一個bool(或其他任何東西):

return Task.FromResult(true);

你也可以返回一個使用completedTask

return Task.CompletedTask;

(注:以上僅是可用於.NET 4.6)

+0

謝謝! 'FromResult'工作正常。我找不到'Task.CompletedTask'。我使用'使用System.Threading;'和'使用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