Поскольку я хочу unit test мой код, я применил шаблон репозитория в своем приложении MVC4. Мне удалось создать контекстный интерфейс, поддельный контекст и использовать поддельную реализацию System.Data.Entity.DbSet
, выполнив этот код.
К сожалению, как и два плаката передо мной (здесь и здесь), мне не удается mock DbContext.Entry method
. Я использую этот метод для обновления записей базы данных в своем коде следующим образом:
DbContext.Entry(order).State = EntityState.Modified;
Я не нашел решения этой проблемы, только люди, которые говорят такие вещи, как:
"и какова точка модульного тестирования этого кода? Вы подделываете Find метод, то вы подделываете DbEntityEntry и не будет реальной логики для тест".
или
прочитайте этот и все связанные вопросы перед продолжением. (...) Если вы хотите протестировать свои репозитории, создайте тесты интеграции с реальной базой данных.
Это все хорошо и хорошо, но до сих пор нет ответа на вопрос. Я прочитал критику, и мне все еще нужен этот метод Entry, поэтому я смогу использовать поддельный контекст и использовать макетные объекты в моем unit test. Конечно, я буду использовать интеграционные тесты, но они не так быстро, как некоторые быстрые модульные тесты.
Ошибка, которую я получаю, когда я пытаюсь выполнить некоторые реализации, заключается в том, что Error 2 'Project.Models.Order' does not contain a definition for 'State' and no extension method 'State' accepting a first argument of type '[whatever return type I use]' could be found (are you missing a using directive or an assembly reference?)
Я надеюсь, что кто-то может помочь мне создать поддельный метод DbContext.Entry.