【问题标题】:Configuring DbContext for InMemoryDatabase that also depends on IOptions为同样依赖于 IOptions 的 InMemoryDatabase 配置 DbContext
【发布时间】:2021-03-08 06:21:32
【问题描述】:

我想为单元测试创​​建 InMemoryDatabase。

我的 DbContext 派生自 ApiAuthorizationDbContext<ApplicationUser>,我无法在测试代码中实例化我的 DbContext,因为构造函数中缺少 operationalStoreOptions

我应该怎么做才能为我的上下文创建operationalStoreOptions

DbContext

public class ApplicationDbContext : ApiAuthorizationDbContext<ApplicationUser>
{
   
    public ApplicationDbContext(
                DbContextOptions options,
                IOptions<OperationalStoreOptions> operationalStoreOptions) : base(options, operationalStoreOptions) { }

    public virtual DbSet<Assignment> Assignment { get; set; }
    public virtual DbSet<Course> Course { get; set; } 
                           ...........
    // More DbSet and OnModelCreating method
 }

我的测试代码

 var options = new DbContextOptionsBuilder<ApplicationDbContext>()
           .UseInMemoryDatabase(databaseName: "TestDbContext")
           .Options;
    

 //ApplicationDbContext needs 2 constructor parameter
 using (var _context = new ApplicationDbContext(options))
 {
   _context.Assignment.Add(new Assignment(1, "Test"));
   _context.SaveChanges();
 }

【问题讨论】:

  • 您需要测试 IdentityServer4 服务吗?如果没有,你可以制作另一个构造函数

标签: c# asp.net-core entity-framework-core asp.net-core-webapi xunit.net


【解决方案1】:

我应该如何为我的上下文创建操作商店选项?

创建所需类型的实例,根据需要填充测试用例,然后使用Options.Create&lt;TOptions&gt; 获取所需的IOptions 以注入上下文构造函数

var options = new DbContextOptionsBuilder<ApplicationDbContext>()
    .UseInMemoryDatabase(databaseName: "TestDbContext")
    .Options;

OperationalStoreOptions storeOptions = new OperationalStoreOptions {
    //populate needed members
};

IOptions<OperationalStoreOptions> operationalStoreOptions = Options.Create(storeOptions);

//ApplicationDbContext needs 2 constructor parameter
using (var _context = new ApplicationDbContext(options, operationalStoreOptions)) {
    _context.Assignment.Add(new Assignment(1, "Test"));
    _context.SaveChanges();
}

//...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    相关资源
    最近更新 更多