如何对覆盖的OnModelCreating中的设置进行单元测试

Ant*_*pod 5 unit-testing entity-framework

我正在使用Entity Framework 6,在我的上下文中,我重写了OnModelCreating方法:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
Run Code Online (Sandbox Code Playgroud)

在该方法内部,我设置了数据库配置。我想测试一下设置。例如,我有以下代码:

modelBuilder.HasDefaultSchema("public");
Run Code Online (Sandbox Code Playgroud)

我想进行单元测试,以检查是否调用了具有参数值“ public”的HasDefaultSchema。

或像下面的示例一样,我想测试实体UserGroup的HasMany和WithMany方法是否被调用:

 modelBuilder.Entity<UserGroup>()
             .HasMany<User>(g => g.Users)
             .WithMany(u => u.Groups)
             .Map(ug =>
                  {
                     ug.MapLeftKey("GroupId");
                     ug.MapRightKey("UserId");
                     ug.ToTable("UserGroupMembers");
                  });
Run Code Online (Sandbox Code Playgroud)

请指教。谢谢

vap*_*rio 3

您可以为 DbContext 创建一个显式调用的存根OnModelCreating并检查 DbContext 的状态DbModelBuilder

public class TestableMyDbContext : MyDbContext
{
  public void TestModelCreation(DbModelBuilder model)
  {
    OnModelCreating(model);
    // check your model an throw an exception if invalid
  }
}
Run Code Online (Sandbox Code Playgroud)

在 TestMethod 中你捕获了异常

[TestMethod]
public void Should_Initialize_Context()
{
  try
  {
    var context = new TestableMyDbContext();
    context.TestModelCreation(new DbModelBuilder());
  }
  catch (Exception ex)
  {
    Assert.Fail(ex.Message);
  }     
}
Run Code Online (Sandbox Code Playgroud)