如何模拟 ExecuteUpdateAsync

问题描述 投票:0回答:1

如何模拟 EF 7.0 ExecuteUpdate 方法。

像 SaveChangesAsync() 一样如何模拟设置 ExecuteUpdateAsync。我正在使用 NUnit 进行单元测试用例

ExecuteUpdateAsync(a => a.SetProperty(u => u.IsActive, false))

这就是我设置 savechangesasync 的方式

 dbContext.Setup(s => s.SaveChangesAsync(It.IsAny<CancellationToken>())).ReturnsAsync(1);

现在我的测试用例失败并显示以下消息,因为我没有设置executeupdateAsync

System.InvalidOperationException:类型“Microsoft.EntityFrameworkCore.RelationalQueryableExtensions”上没有方法“ExecuteUpdate”

c# asp.net-core entity-framework-core nunit ef-core-7.0
1个回答
0
投票

使用 Moq 和 MockQueryable 你可以做到这一点:

using MockQueryable.Moq;
using Moq;
(...)
var contextMock = new Mock<YourDbContext>(new DbContextOptions<YourDbContext>());

var yourList = new List<YourEntityClass>(){...};
var updatedRows = 1;

var dbSetMock = yourList.AsQueryable().BuildMockDbSet();
dbSetMock.Setup(x => x.ExecuteUpdateAsync(It.IsAny<System.Linq.Expressions.Expression<Func<Microsoft.EntityFrameworkCore.Query.SetPropertyCalls<YourEntityClass>, Microsoft.EntityFrameworkCore.Query.SetPropertyCalls<YourEntityClass>>>>(), It.IsAny<CancellationToken>()))
    .ReturnsAsync(updatedRows);
contextMock.Setup(x => x.YourEntityClass).Returns(dbSetMock.Object);
© www.soinside.com 2019 - 2024. All rights reserved.