2015-03-23 7 views
0

У меня есть пользовательский DisconnectedDbContext для использования с POCOs для отслеживания состояния пользователя в веб-приложении.Moq mocked DbContext возвращает null ObjectContext

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

I подкласс это в течение некоторого модульного тестирования:

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 в вызове конструктора не является нулевым, однако для var mo он равен нулю. Мне нужно, чтобы objAdapterContext не был нулевым, как и для не издевавшихся объектов, потому что я использую это для обработки события ObjectMaterializedObjectContext.

Таким образом, оболочка Moq меняет поведение моего кода. Что-то я могу с этим поделать?

ответ

3

Используйте это:

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