最小起订量模拟 DbContext returns null ObjectContext
Moq mocked DbContext returns null ObjectContext
我有一个自定义 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
不为空,因为我利用它来处理 ObjectContext
.
的 ObjectMaterialized
事件
所以 Moq 包装器正在改变我的代码的行为。我能做点什么吗?
使用这个:
mockSet.CallBase = true;
mockContext.CallBase = true;
我有一个自定义 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
不为空,因为我利用它来处理 ObjectContext
.
ObjectMaterialized
事件
所以 Moq 包装器正在改变我的代码的行为。我能做点什么吗?
使用这个:
mockSet.CallBase = true;
mockContext.CallBase = true;