C# 使用nunit测试模拟的事件处理

C# 使用nunit测试模拟的事件处理,c#,unit-testing,events,nunit,mocking,C#,Unit Testing,Events,Nunit,Mocking,我需要创建一些单元测试来确认一个类的实例对另一个对象引发的事件做出适当的响应。传递“监视”对象的模拟很容易,但据我所知,nunit中的模拟并没有提供让模拟引发事件的方法 我正在考虑使用反射来直接调用我正在测试的对象上的事件处理程序,将引用作为“发送者”传递给mock,但这并不能有效地测试我的对象是否正确地钩住了事件(尽管现在我想,这可能无论如何都应该单独测试) 这看起来确实有点像黑客,但我看不到另一种方法;有更好的办法吗?此外,模拟是否可以检查事件是否已挂接?我使用Rhino mock创建模拟,

我需要创建一些单元测试来确认一个类的实例对另一个对象引发的事件做出适当的响应。传递“监视”对象的模拟很容易,但据我所知,nunit中的模拟并没有提供让模拟引发事件的方法

我正在考虑使用反射来直接调用我正在测试的对象上的事件处理程序,将引用作为“发送者”传递给mock,但这并不能有效地测试我的对象是否正确地钩住了事件(尽管现在我想,这可能无论如何都应该单独测试)


这看起来确实有点像黑客,但我看不到另一种方法;有更好的办法吗?此外,模拟是否可以检查事件是否已挂接?

我使用Rhino mock创建模拟,它们可以很好地处理事件:

RhinoMock代码对于验证订阅是否发生或是否引发事件非常有用,但对于引发事件本身却没有那么好

我也有类似的问题。我通过编写自己的小存根类来解决这个问题,该类实现了事件聚合器接口,并允许我从测试中引发事件。有时候,编写自己的测试代码比在模拟框架中胡闹要容易得多,而模拟框架并不是专门为实现这一点而设计的


你的类的行为只有在它与事件挂钩并响应事件时才有价值,所以我认为单独测试这些行为没有多大意义。

酷,从未注意到Rhino可以做到这一点;不幸的是,我必须在这个例子中使用nUnit。嗨@flyn1179,nUnit?通常你会在NUnit上使用犀牛模型。你在使用NUnit附带的模拟框架吗?是的;然而,鉴于我们目前的所有测试都没有使用Rhino,我很难说服我的团队/老板在一些测试中使用Rhino,在其他测试中使用nUnit's Mock,或者完全改用Rhino。我猜我最初问题的答案是简单的“不”,虽然我应该说明,但我受环境的限制,只能模仿努尼特的作品。看来我得用存根选项了。