我正在测试的应用程序充满了基于自定义委托的事件,例如:
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)
的传统事件签名来举办活动,但我不知道在我的情况下该怎么做。
有什么想法吗?
答案 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");