Как смоделировать отслеживание изменений ядра Entity Framework - PullRequest
0 голосов
/ 01 июля 2019

У меня есть такая настройка Mocked Context.

// Creates a working Fake Db Set of FakeClass Type
var fakeDbSet = Mockings.CreateDbSetMock(fakeData);  
var fakeContext = new Mock<FakeContext>();  
fakeContext.Setup(c => c.FakeData).Returns(fakeDbSet);     

Доступ к самому контексту, а FakeData работает как задумано. Но сейчас я пытаюсь написать модульный тест для функции, которая обращается к ChangeTracker из fakeContext.

ctx.ChangeTracker.AutoDetectChangesEnabled = false;  

Теперь тест не пройден и выдается исключение, потому что при доступе к ChangeTracker из имитируемого контекста возвращается ноль.

Есть ли способ издеваться над ChangeTracker контекста?

Я уже пытался настроить смоделированный контекст с помощью смоделированного ChangeTracker, но я не могу создать действительный экземпляр, потому что он запрашивает сам контекст в конструкторе.

1 Ответ

0 голосов
/ 10 июля 2019

Вам нужно будет обернуть вызов ChangeTracker.Это может показаться уродливым, но способ сделать это будет следующим:

  1. Измените свой рабочий код, чтобы настроить контекст через фабрику, чтобы вы могли использовать интерфейс для обработки контекста.
    using (var ctx = _data.Create())
  2. Расширьте интерфейс, чтобы включить переключатель для трекера.
    void SetChangeTracking(bool enabled);
  3. Расширьте свой FakeContext для реализации нового интерфейса оболочки.

Затем вы можете вызвать SetChangeTracking(true); в своем производственном коде.Реализация SetChangeTracking должна модифицировать объект ctx, тогда как тестовый код может безопасно возвращать void.

...