2016-09-09 3 views
1

У меня возникают настоящие проблемы с насмешкой, когда дело касается EF (версия 6, для чего это стоит).Сфокусировавшись на платформе Entity Framework и TypeMock

Это метод, который я пытаюсь тест:

public async Task<bool> IsSurveyComplete(Guid entityRef) 
    { 
     using (MyDbEntities context = new MyDbEntities()) 
     { 
      MyEntity entity = await context.MyEntities.FindAsync(entityRef); 
      // do stuff 
     } 
    } 

мне нужно фальсифицировать «лицо», но я понял, что просто пытаюсь сделать Isolate.Fake.Instance не работает, так как это на самом деле ObjectProxy, а не экземпляр типа MyEntity. Я обнаружил, что способ обойти это - установить контекст. Configuration.ProxyCreationEnabled - false. Однако это не работает, если я делаю это где угодно, кроме конструктора. Если я пытаюсь подделать DbContextConfiguration, он все еще использует прокси.

Итак, я создал новый конструктор будет использоваться при тестировании:

public MyDbEntities(bool useProxy) 
     : base("name=MyDbEntities") 
    { 
     this.Configuration.ProxyCreationEnabled = useProxy; 
    } 

, а затем, в моем тесте:

Isolate.WhenCalled(() => new MyDbEntities()).WillReturn(new MyDbEntities(false)); 

Однако свойство ProxyCreationEnabled еще значение ИСТИНА, когда я положите точку останова в методе IsSurveyComplete после инструкции using.

Я также попытался (среди многих, многих других вещей):

var fakeContext = new MyDbEntities(false); 
    Isolate.Swap.AllInstances<MyDbEntities>().With(fakeContext); 

Опять же, когда я исследую с точки останова, ProxyCreationEnabled верно.

Я собираюсь отказаться от TypeMock!

+0

Можете ли вы пожалуйста загрузите свой код «IsSurveyComplete» и ваш тест? –

ответ

2

чтец: Я работаю в TypeMock

вы используете неправильную функцию TypeMock, вы должны использовать:

var fakeContext = Isolate.fake.NextInstance<MyDbEntities>(); 
Isolate.whenCalled(()=>fakeContext.MyEntities). 
    WillReturnCollectionValuesOf(listOfEntities.AsQueryable()); 

вместо:

var fakeContext = new MyDbEntities(false); Isolate.Swap.AllInstances<MyDbEntities>().With(fakeContext);

Смежные вопросы