6

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

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

我想模拟产生这些事件的类,并将这些事件提交给被测类。

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

有任何想法吗?

4

2 回答 2

3

FakeItEasy 2.0.0 开始,这已经成为可能。

Raising Events 文档主题有完整的故事,但要点是您将使用

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

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

于 2016-05-27T20:39:05.887 回答
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");
于 2013-08-12T17:45:22.077 回答