我希望能够对我正在编写的自定义集合进行单元测试,该集合需要订阅添加到集合中的对象的PropertyChanged
事件。然后在删除事件时取消订阅。
当添加到集合中的项目是一个界面时,这不是什么大问题,我可以模拟(使用Rhino Mocks)和Expect
订阅。但在一个实例中,添加的项目是实际的类,我不能模拟事件,因为它们不是虚拟的。
我是否有另一种方法可以测试这些类是否已正确订阅和取消订阅PropertyChanged
事件?
答案 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);