Я работаю над проектом, построенным на Asp.Net Boilerplate, и теперь мне нужно выполнить модульное тестирование сервисов, используя реальные репозитории с реальным подключением к базе данных (без насмешек). Я использовал последний пост BringerOd в https://gist.github.com/hikalkan/1e5d0f0142484da994e0 в качестве руководства по настройке экземпляра UnitOfWorkScope. Итак, мой код в настоящее время выглядит примерно так:
IDisposableDependencyObjectWrapper<IUnitOfWork> _unitOfWork;
[TestInitialize]
public void SetUpService()
{
//initialize service
_unitOfWork = IocManager.Instance.ResolveAsDisposable<IUnitOfWork>();
UnitOfWorkScope.Current = _unitOfWork.Object;
UnitOfWorkScope.Current.Initialize(true);
UnitOfWorkScope.Current.Begin();
}
[TestCleanup]
public void CleanUpService()
{
UnitOfWorkScope.Current.Cancel();
_unitOfWork.Dispose();
UnitOfWorkScope.Current = null;
}
Это работает как шарм для первого модульного теста, но когда я пытаюсь вызвать репозиторий во втором тесте, я получаю: «Операция не может быть завершена, поскольку DbContext был удален».
Я предполагаю, что когда метод TestInitialize запускается снова, единице объема работы назначается тот же (удаленный) DbContext, а не новый. Я предполагаю, что внутри моих фактических методов тестирования я мог бы настроить свой UnitOfWorkScope внутри блока использования с помощью IUnitOfWork. Однако я действительно не хочу повторять эту логику внутри каждого теста. Кто-нибудь знает, как вручную получить эффект использования блока, чтобы каждый раз получать новый DbContext?