[英]How to return passed parameters in an async method with Moq in unit tests?
我正在努力解決如何使用 Moq-Setup-Return 構造的問題。
首先,我的設置:
某些類型為IRepository
-Interface 的存儲庫必須實現StoreAsync
,該方法返回一個 StoreResult 對象,其中包含存儲的實體作為屬性。
using System.Threading.Tasks;
using Moq;
using Xunit;
namespace Tests
{
public class Entity { }
public class StoreResult
{
public Entity Entity { get; set; }
}
public interface IRepository
{
Task<StoreResult> StoreAsync(Entity entity);
}
public class Tests
{
[Fact]
public void Test()
{
var moq = new Mock<IRepository>();
moq.Setup(m => m.StoreAsync(It.IsAny<Entity>())).Returns(e => Task.FromResult<Task<StoreResult>>(new StoreResult {Entity = e}));
}
}
}
現在我嘗試為 IRepository-Interface 編寫一個 Mock-Objekt,但我不知道如何對 Return-Statement 進行編碼,以便 StoreResult-Object 包含作為參數提供給 StoreAsync-Function 的實體。
我在Moq ReturnsAsync() 中閱讀了有關此主題的內容, 其中包含傳遞給方法的參數和返回值。
我試過了
moq.Setup(m => m.StoreAsync(It.IsAny<Entity>()))
.ReturnsAsync(entity => new StoreResult {Entity = entity});
帶有錯誤語句“無法將 lambda 表達式轉換為類型“ StoreResult
”,因為它不是委托類型。
並使用我嘗試過的相同錯誤消息
moq.Setup(m => m.StoreAsync(It.IsAny<Entity>()))
.Returns(e => Task.FromResult<Task<StoreResult>>(new StoreResult {Entity = e}));
我正在使用帶有Moq 4.6.36-alpha
的 .NET Core xUnit 環境
謝謝你的幫助。
感謝 Callum Linigton 的提示,我找到了以下解決方案:
moq
.Setup(m => m.StoreAsync(It.IsAny<Entity>()))
.Returns((Entity e) => Task.FromResult(new StoreResult {Entity = e}));
關鍵區別在於為 lambda 表達式的輸入參數指定類型以避免歧義調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.