Moq模拟DbContext返回null ObjectContext

时间:2015-03-23 10:38:04

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

我有一个自定义DisconnectedDbContext用于在Web应用中使用自我状态跟踪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; }
}

Moq中使用TestMethod,如下所示:

[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不为null,但对于var mo,它为null。根据非模拟对象,我需要objAdapterContext不为空,因为我点击此处以处理ObjectMaterialized的{​​{1}}事件。

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

1 个答案:

答案 0 :(得分:3)

使用此:

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