【问题标题】:Moq mocked DbContext returns null ObjectContextMoq 模拟 DbContext 返回 null ObjectContext
【发布时间】:2015-03-23 22:26:02
【问题描述】:

我有一个自定义 DisconnectedDbContext 用于网络应用程序中的自我状态跟踪 POCO。

public abstract class DisconnectedDbContext : DbContext
{
    protected DisconnectedDbContext()
    {
        var objAdapterContext = ((IObjectContextAdapter)this).ObjectContext;
    }
}

我将其子类化以进行一些单元测试:

public class FruityContext : DisconnectedDbContext
{
    public virtual DbSet<FruitBowl> FruitBowls { get; set; }
    public virtual DbSet<Fruit> Fruits { get; set; }
}

并在TestMethod 中使用Moq,如下所示:

[TestMethod]
public void CreateAFruityContext()
{
    var dbc = new FruityContext();
    Assert.IsNotNull(dbc);
    var mockSet = new Mock<DbSet<FruitBowl>>();
    var mockContext = new Mock<FruityContext>();
    mockContext.Setup(m => m.FruitBowls).Returns(mockSet.Object);
    var mo = mockContext.Object;
    Assert.IsNotNull(mo);
}

现在这不是真正的TestMethod,所以我不想在这件事上跑题。

我的问题是,对于在此方法中创建 var dbc,构造函数调用中的 objAdapterContext 不为空,但对于 var mo,它为空。根据非模拟对象,我需要 objAdapterContext 不为空,因为我利用它来处理 ObjectContextObjectMaterialized 事件。

所以 Moq 包装器正在改变我的代码的行为。对此我能做些什么吗?

【问题讨论】:

    标签: c# entity-framework unit-testing moq


    【解决方案1】:

    使用这个:

    mockSet.CallBase = true;
    mockContext.CallBase = true;
    

    【讨论】:

      猜你喜欢
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      相关资源
      最近更新 更多