如何根据自定义代表在FakeItEasy中举办活动?

时间:2012-10-16 19:20:38

标签: c# mocking fakeiteasy

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

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)的传统事件签名来举办活动,但我不知道在我的情况下该怎么做。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

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

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

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

与往常一样,事件必须是虚拟的。

答案 1 :(得分:0)

你总是可以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");