2
我很困擾如何使用Moq-Setup-Return構造。如何在單元測試中使用Moq在異步方法中返回傳遞的參數?
首先我的設置:
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}));
}
}
}
現在我試着寫一個實體模型OBJEKT爲IRepository接口,但是我不知道如何使StoreResult,對象包括給定的參數爲StoreAsync-實體編碼的返回,聲明功能。
我在Moq ReturnsAsync() with parameters和MOQ: Returning value that was passed into a method閱讀了關於此主題。
我已經試過
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}));
我使用的是.NET核心的xUnit環境Moq 4.6.36-alpha
謝謝你的幫助。
它不應該僅僅是:'Task.FromResult(新StoreResult {實體= E})' –
@CallumLinington - 隨着'.Returns(Task.FromResult(新StoreResult {實體= E}));' e沒有定義。 –
這就是'It.IsAny'。給它一個適當的實體! –