如何模拟 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”
使用 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);