如何单元测试事件订阅

时间:2011-11-02 15:55:52

标签: unit-testing events c#-4.0 rhino-mocks

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

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

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

1 个答案:

答案 0 :(得分:3)

代替使用模拟,你只需在具体类型中添加一个属性,告诉你事件是否有订阅?只是一个建议。这可能与使用模拟界面的整体设计和/或其余单元测试无关。

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);