Я работаю над ASP.Net Core 2.0 API, который использует Entity Framework Core 2.0.Я пытаюсь создать модульные тесты, используя XUnit и Moq, но у меня возникла проблема с созданием интерфейса для моего DbContext
, чтобы я мог смоделировать его в своих модульных тестах.
В настоящее время мой проект не использует интерфейс для моего контекста.Я внедряю его в свои классы репозитория в качестве его реализации.И в моем Startup.cs
я использую services.AddDbContext
для его настройки.
Пример типичного конструктора класса репозитория.
public CompaniesRepository(MyDbContext myDbContext)
{
_myDbContext = myDbContext;
}
Пример Startup.cs
services.AddDbContext<MyDbContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("MyDbConnectionString"),
sqlOptions =>
{
sqlOptions.EnableRetryOnFailure(5,TimeSpan.FromSeconds(30),sqlTransientErrors);
});
});
И этот метод работал так же хорошо, как этот.
Однако сейчас я пытаюсь настроить модульные тесты и хочу иметь возможность Mock моего контекста, поэтому мне нужно создать интерфейс дляЭто.
Итак, я добавил в MyDbContext
интерфейс IMyDbContext
и добавил следующий код в свой Startup.cs
, следуя рекомендациям в этом блоге Джерри Пелсера
services.AddScoped<IMyDbContext>(provider => provider.GetService<MyDbContext>());
Что, похоже, сработало, за исключением одного вопроса.Я также использую NuGet Бориса Джурджевича EFCore.BulkExtensions
, и поэтому я получаю ошибку компиляции, исходящую из моих классов репозитория, которая теперь внедряет интерфейс IMyDbContext
в свои конструкторы, заявляя, что мой интерфейс не содержит определения для BulkInsert
:
Ошибка CS1929 «IMyDbContext» не содержит определения для «BulkInsert» и наилучшей перегрузки метода расширения «DbContextBulkExtensions.BulkInsert (DbContext, IList, BulkConfig, Action)« требуется получатель типа »DbContext '
Я предполагаю, что мне нужно как-то добавить метод расширения BulkInsert
в мой интерфейс IMyDyBontext
, но я не уверен, как это сделать правильно.Если я просто пытаюсь добавить метод в свой интерфейс, то получаю сообщение об ошибке, утверждая, что он не реализован в моем классе MyDbContext
, конечно.
Как ссылаться на метод расширения BulkInsert
в моем классе MyDbContext
?