Mocking IDisposable classes

本文关键字:classes IDisposable Mocking | 更新日期: 2023-09-27 17:59:23

场景:我有一个类在其默认构造函数中订阅了一个静态事件。因此,类被设为IDisposable,这样它就可以取消订阅静态事件并被正确地垃圾回收。这个类在使用RhinoMocks的测试中被模拟。它具有复合部件子级,可能是也可能不是IDisposable

问题:由于Dispose方法被RhinoMocks自动模拟,我正在泄漏这些对象。这会在不同的测试中导致"随机"错误,因为仍然订阅的对象会对未正确设置的事件做出反应。

问题:我知道RhinoMocks有一些方法可以声明应该调用原始方法(CallOriginalMethod),但我注意到RhinoMocks有时会在我自己的声明之外创建代理。因此,我认为我无法阻止这些对象被泄露。有办法解决这个问题吗?

Mocking IDisposable classes

当您模拟一个类时,您可以传入额外的接口(或类型)来实现(例如IDisposable)

在单元测试的拆卸阶段,您可以将模拟对象强制转换为IDisposable类型,并调用Dispose