我希望能够对我正在编写的自定义集合进行单元测试,它需要订阅添加到集合中的对象的 PropertyChanged
事件。然后在事件被删除时取消订阅。
当添加到集合中的项目是一个接口(interface)时,这不是什么大问题,我可以模拟它(使用 Rhino Mocks)并 Expect
订阅。但在一个实例中,添加的项目是实际类,我无法模拟这些事件,因为它们不是虚拟的。
有没有其他方法可以测试这些类是否正确订阅和取消订阅了它们的 PropertyChanged
事件?
最佳答案
除了使用模拟之外,您是否可以简单地向具体类型添加一个属性来告诉您事件是否有订阅?只是一个建议。这可能与整体设计和/或使用模拟接口(interface)的其余单元测试不一致。
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);
关于unit-testing - 如何对事件订阅进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7983364/