У меня есть базовый класс, который я использую с MSpec, который предоставляет удобные методы вокруг AutoMock:
public abstract class SubjectBuilderContext
{
static AutoMock _container;
protected static ISubjectBuilderConfigurationContext<T> BuildSubject<T>()
{
_container = AutoMock.GetLoose();
return new SubjectBuilderConfigurationContext<T>(_container);
}
protected static Mock<TDouble> GetMock<TDouble>()
where TDouble : class
{
return _container.Mock<TDouble>();
}
}
Иногда я вижу исключение при попытке получить Mock следующим образом:
It should_store_the_receipt = () => GetMock<IFileService>().Verify(f => f.SaveFileAsync(Moq.It.IsAny<byte[]>(), Moq.It.IsAny<string>()), Times.Once());
Вот исключение:
System.ObjectDisposedExceptionInstances не могут быть разрешены, а вложенные времена жизни не могут быть созданы из этого LifetimeScope, так как он уже удален.
Я предполагаю, что это как-то связано с тем, как MSpec запускает тесты (посредством отражения), и что есть период времени, когда ничто активно не имеет ссылок на какие-либо объекты в базовой области действия, используемой AutoMock, что вызывает жизненный цикл утилизироваться. Что здесь происходит, и есть ли простой способ предотвратить это?