unit-testing - 如何对事件订阅进行单元测试

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

我希望能够对我正在编写的自定义集合进行单元测试,它需要订阅添加到集合中的对象的 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/

相关文章:

javascript - 将短划视为点击

java - 为什么 Event.fireAsync() 需要 @ObservesAsync 注释?

java - Mockito:如何验证一个方法只被调用一次,使用精确的参数忽略对其他方法的调用?

ios - 使用 pod 时,isKindOfClass 在目标之间不匹配

c# - NUnit、MSTest 和 xUnit 的选择性测试运行器

python - 在 Webtest 测试失败中找到真正的错误

events - NHibernate IPostInsertEventListener : Insert executed multiple times

c# - 何时强制执行 LINQ 查询评估?

c# - 访问程序自己的目录

c# - 将 Regex.Matches 连接到一个字符串