Rhino模拟AssertWasNotCalled提取到泛型方法失败

时间:2018-06-14 13:33:49

标签: c# .net generics extension-methods rhino-mocks

我试图实现常见的扩展"快捷方式"检查模拟(Rhino)上是否未调用Dispose()的方法:

public static void AssertNotDisposed<T>(this T disposable) where T : IDisposable =>
    disposable.AssertWasNotCalled(x => x.Dispose());

但并不像我预期的那么简单。

var mock = MockRepository.GenerateMock<Stream>();
mock.Dispose();
mock.AssertNotDisposed();

AssertNotDisposed调用不会注意mock.Dispose()如果为派生类型进行了模拟而不是直接为IDisposable

如果我的方法参数完全是IDisposable,我可以在某种程度上证明失败是正确的(看起来Rhino不仅仅区分模拟实例,而且甚至可以区分访问它们的类型)。

如果相同的假设对于泛型有效,那么动作(反射)构造动作和方法调用(不是通用的)可以帮助我不确定如何立即执行它。

那么问题的真正原因是什么?为什么AssertNotDisposed()会忽略前面的Dispose()

0 个答案:

没有答案