【问题标题】:Initialize a DbSet without a Context in C# - Mocking在 C# 中初始化没有上下文的 DbSet - 模拟
【发布时间】:2017-11-07 06:18:32
【问题描述】:

我正在为通用泛型方法编写测试用例,因为我没有任何数据库配置,但方法泛型方法正在处理 IQueryable 对象。所以,我尝试了以下代码

public static DbSet<Person> GetPersonDbSet() {
    DbSet<Person> record = null;
    record.Add(new Person() {
        PersonId = 1,
        FirstName = "Ram",
        LastName = "Kumar"
    });

    record.Add(new Person() {
        PersonId = 2,
        FirstName = "Raj",
        LastName = "Kumar"
    });

    return record;
}

原始方法:

public static class MyLib {
    public static IQueryable Pagination<T>(IOrderedQueryable<T> query, int offset, int limit) {

        // Validation Code (...)

        // Main Logic
        return query.Skip(offset).Take(limit);

    }
}

测试方法:

[Fact]
public void CheckPagination() {
    var query = GetPersonDbSet().OrderBy(i => i.FirstName);

    var result = MyLib.Pagination(query, 1, 5);
    int count = result.Count();
    Assert.True(count > 0);
}

在添加实体时,GetPersonDbSet() 出现异常,因为变量 DbSet&lt;Person&gt; record 是用 null 初始化的。请帮助我如何在没有上下文的情况下初始化和实现这一点(因为在这个项目中我没有使用任何数据库上下文)。

【问题讨论】:

    标签: c# linq-to-entities iqueryable xunit.net dbset


    【解决方案1】:

    我会开始:

    DbSet&lt;Person&gt; record = new TestDbSet&lt;Person&gt;();

    并阅读 https://msdn.microsoft.com/en-us/library/dn314431(v=vs.113).aspx(其中包括 TestDbSet 的定义)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 2021-08-17
      • 1970-01-01
      • 2016-08-01
      相关资源
      最近更新 更多