使用FakeItEasy如何使伪造的方法调用引发一个事件?

5
我正在尝试完成以下类似内容的操作:
A.CallTo(() => fakeTimer.Start()).Invokes(() => 
    fakeTimer.Elapsed += Raise.With<ElapsedEventArgs>(ElapsedEventArgs.Empty).Now);
fakeTimerITimer的一个伪装,根据这个答案,它是一个包装接口。
显然这不起作用,因为我不能在表达式树内部进行赋值。
实际上我想做的是在调用Start方法时模拟触发计时器事件。这样我就可以断言确实调用了Start方法。
有任何(替代)想法吗? 编辑 我是个傻瓜,错是我的!我不小心添加了一个额外的A.CallTo,我本不应该这样做。但我不会删除这个问题,我要让Patrik Hägne获得他应得的声望 :)

尝试使用大括号将表达式包裹起来:A.CallTo(() => { ... }) - mellamokb
@mellamokb 这不起作用,因为带有语句体 ({...}) 的 Lambda 表达式无法转换为表达式树... - Igal Tabachnik
啊,它需要一个 Expression<Action>源链接)。你可能需要显式地进行转换,因为 ActionExpression<Action> 在技术上是有歧义的:(Expression<Action>)(() => ... ) - mellamokb
我认为你应该让问题保持原样以帮助搜索者。我在谷歌上搜索了“fake it easy event was raised”,来到了这里,因为答案和问题中有相同的代码片段而感到困惑。 - johnildergleidisson
1个回答

9

我不太确定你想做什么,这是吗?

A.CallTo(() => fakeTimer.Start()).Invokes(() => 
    fakeTimer.Elapsed += Raise.With<ElapsedEventArgs>(ElapsedEventArgs.Empty).Now);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接