【问题标题】:The method or operation is not implemented. Microsoft.EntityFrameworkCore.DbSet`1.System.Linq.IQueryable.get_Provider()该方法或操作未实现。 Microsoft.EntityFrameworkCore.DbSet`1.System.Linq.IQueryable.get_Provider()
【发布时间】: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


【解决方案1】:

我发现了问题所在。 Telerik.JustMock 需要在模拟 Linq 查询等高级对象时启用分析器。我启用了分析器,单元测试运行成功。

【讨论】:

    猜你喜欢
    • 2016-04-06
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2017-01-13
    • 1970-01-01
    相关资源
    最近更新 更多