【问题标题】:How do I raise an event in FakeItEasy for an event based on a custom delegate?如何在 FakeItEasy 中为基于自定义委托的事件引发事件?
【发布时间】:2012-10-16 19:20:37
【问题描述】:

我正在测试的应用程序充满了基于自定义委托的事件,例如:

public delegate void NameChangedHandler(string name);
public event NameChanged OnNameChanged;
...
public void ChangeYourName(string newName)
{
    if( NameChanged != null )
        NameChanged(newName);
}

我想模拟产生这些事件的类并将这些事件引发到被测类。

我知道 FakeItEasy 可以使用 Raise.With() 来引发具有 MyHandler(object sender, EventArgs e)MyHandler(EventArgs e) 的传统事件签名的事件,但我不知道在我的情况下该怎么做。

有什么想法吗?

【问题讨论】:

  • 我今天遇到了完全相同的事情。有人可以帮忙吗?
  • 我相信答案是 FakeItEasy 无法做到这一点。我的解决方案是重构我的事件以采用 EventArgs。

标签: c# mocking fakeiteasy


【解决方案1】:

FakeItEasy 2.0.0 开始,现在可以实现了。

Raising Events documentation topic 有完整的故事,但要点是你会使用

fake.OnNameChanged += Raise.With<NameChanged>(newName);

与往常一样,活动必须是虚拟的。

【讨论】:

    【解决方案2】:

    您总是可以将ChangeYourName 设为虚拟并替换该方法。

    A.CallsTo(()=>fakeClass.ChangeyourName(A<string>._)).Invokes((x)=>invokeMockEvent(x));
    

    如果这不是你想要的,我想如果 ChangeYourName 是公开的,你可以创建你的假类

    var class = new Class();
    class.OnNameChanged += (x)=>
    {
        Assert.AreEqual(x,"tim");
    };
    
    class.ChangeYourName("tim");
    

    【讨论】:

      猜你喜欢
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多