小编Cas*_*sey的帖子

Moq引发事件错误 - 参数计数不匹配

背景

我有以下场景:

  • 带有构造函数的MailItemProxy类,其单个参数类型为MailItem(MailItem实际上是Microsoft.Office.Interop.Outlook命名空间的一部分)
  • 在MailItemProxy的构造函数中,注册了一个名为PropertyChange的事件(来自Outlook MailItem类):
public MailItemProxy(MailItem mailItem)
{
    this.mailItem = mailItem;
    this.mailItem.PropertyChange += this.MailItem_PropertyChange;
}
Run Code Online (Sandbox Code Playgroud)

我的MailItemProxy类实现了INotifyPropertyChanged,因此有自己的PropertyChanged事件(注意这是"PropertyChanged"而不是Outlook MailItem自己的"PropertyChange"时态).

*MailItem_PropertyChange*事件处理程序如下:

 private void MailItem_PropertyChange(string name)
 {
     if (this.PropertyChanged != null)
     {
         this.PropertyChanged(this, new PropertyChangedEventArgs(name));
     }
 }
Run Code Online (Sandbox Code Playgroud)

意向

我的目的是测试何时触发MailItem PropertyChange事件,测试中的类(MailItemProxy)已正确订阅该事件.

我使用的测试框架是Moq.

我得到的问题是我在Act行上收到运行时错误"参数计数不匹配",我尝试为mailItemStub引发一个PropertyChange事件.PropertyChange事件只接受一个类型为string的参数,该参数由Microsoft.Office.Interop.Outlook命名空间中的委托ItemEvents_10_PropertyChangeEventHandler(字符串名称)定义.如果我删除mailItemProxy的最后两个Arrange行,那么Act行由于某种原因运行正常,但我显然需要代理,因为这是我正在测试的类.

有什么想法我收到这个错误?

 [TestMethod]
 public void PropertyChanged_WhenMailItemPropertyChange_EventIsCalled()
 {
     // Arrange
     bool eventDispatched = false;
     var mailItemStub = new Mock<MailItem>();
     var mailItemProxy = new MailItemProxy(mailItemStub.Object);
     mailItemProxy.PropertyChanged += (sender, args) => { …
Run Code Online (Sandbox Code Playgroud)

c# events vsto moq mocking

4
推荐指数
1
解决办法
3218
查看次数

标签 统计

c# ×1

events ×1

mocking ×1

moq ×1

vsto ×1