如何单元测试事件订阅



我希望能够对我正在编写的自定义集合进行单元测试,该集合需要订阅添加到集合中的对象的PropertyChanged事件。然后在事件被删除时取消订阅。

当添加到集合中的项目是一个接口时,这不是什么大问题,我可以模拟它(使用Rhino mock)并Expect订阅。但是在一个实例中,添加的项目是实际的类,我不能模拟事件,因为它们不是虚拟的。

是否有另一种方法可以测试这些类是否正确订阅和取消订阅PropertyChanged事件?

不使用mock,您是否可以简单地向具体类型添加一个属性来告诉您事件是否有订阅?只是个建议。这可能与使用模拟接口的整体设计和/或其余单元测试不一致。

class SomeClass : INotifyPropertyChanged
{
   public bool PropertyChangedSubscribed
   {
      get { return PropertyChanged != null; }
   }
   public event PropertyChangedEventHandler PropertyChanged;
}
// unit test code
var someClass = new SomeClass();
Assert.IsFalse(otherClass.PropertyChangedSubscribed);
someClass.PropertyChanged += SubscribedMethod;
Assert.IsTrue(otherClass.PropertyChangedSubscribed);

最新更新