【发布时间】:2021-03-01 01:28:54
【问题描述】:
我有一个在 .Net Framework 上运行良好的测试方法,但在到达链接查询时在 EntityFrameworkCore 上生成错误。错误是“方法或操作未实现。Microsoft.EntityFrameworkCore.DbSet`1.System.Linq.IQueryable.get_Provider()”
这是我的测试方法
[Fact]
public void UserNeverLoggedOn2_Test()
{
var userDataSet = new List<User>
{
new User
{
UserId = 1,
IsActive = true,
CreatedBy = "WBrown",
CreatedDate = new DateTime(2019, 5, 1,0,0,0,DateTimeKind.Utc),
LastAccessDate = DateTime.MinValue,
FirstName = "Joe",
LastName = "Doe"
},
new User
{
UserId = 2,
IsActive = true,
CreatedBy = "WBrown",
CreatedDate = new DateTime(2017, 5, 1),
LastAccessDate = DateTime.MinValue,
LastActionTaken = DateTime.Now,
FirstName = "Jane",
LastName = "Smith"
}
}.AsQueryable();
var mockUserSet = Mock.Create<DbSet<User>>() ;
Mock.Arrange(() => ((IQueryable<User>)mockUserSet).Provider).Returns(() => userDataSet.Provider);
Mock.Arrange(() => ((IQueryable<User>)mockUserSet).Expression).Returns(() => userDataSet.Expression);
Mock.Arrange(() => ((IQueryable<User>)mockUserSet).ElementType).Returns(() => userDataSet.ElementType);
Mock.Arrange(() => ((IEnumerable<User>)mockUserSet).GetEnumerator()).Returns(() => userDataSet.GetEnumerator());
var dbContextMock = Mock.Create<EFDbContext>(); //
Mock.Arrange(() => dbContextMock.Users).Returns(() => mockUserSet);
//Act
IQueryable<User> query = from u in dbContextMock.Users
.Where u.UserId = 1
select u;
Assert.NotNull(result);
Assert.Equal(1, result.First().UserId);
}
不确定为什么它可以在 .Net Framework 上运行而在 .NetCore 上失败。
【问题讨论】:
-
没有理由尝试像这样模拟 EF Core DbContext,因为内存提供程序完全按照您在此处尝试执行的操作
-
Panagiotis Kanavos,感谢您的回复。您能否与使用内存提供程序的示例分享一个好的链接?
标签: c# .net-core entity-framework-core