我目前正在使用NSubstitute作为我的模拟框架,并且我做得还算不错,唯一的例外是...
我正在尝试模拟一个从模拟对象内部调用事件的交互,但是不幸的是,我真的很努力做到这一点。设置是这样的...
Public Interface IMockObject
Event MyMockedEvent( someId as Integer )
Sub MyRoutineThatInvokesMyMockedEvent( someId as Integer)
End Interface
...因此在我的单元测试中,我需要模拟'MyRoutineThatInvokesMyMockedEvent'来接收ID,然后引发'MyMockedEvent'。到目前为止,我已经提出...
Dim mockedObject = Substitute.For(Of IMockObject)()
mockedObject.When(
Sub(x) x.MyRoutineThatInvokesMyMockedEvent( 999 )).Do(
Sub(y) 'RaiseTheEventHere )
...但是我坚持使用以下无效条件实际引发该事件...
mockedObject.When(
Sub(x) x.MyRoutineThatInvokesMyMockedEvent( 999 )).Do(
Sub(y) RaiseEvent MyMockedEvent(999) )
...我确实有一个理论,那就是在VB.NET中(如果不创建帮助程序)这是不可能的,但是如果没有帮助程序,如何实现上述目标将不胜感激。
最佳答案
好,找到答案了。或类似的东西。
我认为问题是由于使用了事件定义-通过将“ MyMockedEvent”重新配置为使用其自己的“ MyMockedEventArgs”(继承自System.EventArgs),可以引发事件而不会抱怨传递了不合适的类型。
mockedObject.When(
Sub(x) x.MyRoutineThatInvokesMyMockedEvent( 999 )).Do(
Sub(y) RaiseEvent IMockObject.MyMockedEventEventHandler() )
但是在这里,我怀疑VB.NET会做一些魔术,因为我知道VB.NET会为幕后活动创建委托。当然,Intellisense不显示EventHandler的事实也没有特别的帮助,我想我可以手动编写委托,但是这种方法似乎更快。
高温超导
关于vb.net - N替换并 mock 对象以触发事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11986001/