我有一个与 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 使用的底层生命周期范围内的任何对象,这会导致生命周期范围得到处置。这里发生了什么,我有什么简单的方法可以防止它发生吗?