【发布时间】:2012-07-25 18:00:02
【问题描述】:
我正在尝试按照以下方式做一些事情:
A.CallTo(() => fakeTimer.Start()).Invokes(() =>
fakeTimer.Elapsed += Raise.With<ElapsedEventArgs>(ElapsedEventArgs.Empty).Now);
fakeTimer 是 ITimer 的假冒,this answer 的包装接口。
显然这是行不通的,因为我无法在 Experssion Tree 中进行分配。
我真正想要实现的是在调用Start 方法时模拟引发计时器事件。这样我就可以断言确实发生了对Start 的调用。
任何(替代)想法?
编辑我是个白痴,错在我自己!我不小心添加了一个额外的A.CallTo,这是我不应该添加的。我不会删除这个问题,而是将其保留给Patrik Hägne 他应有的声誉:)
【问题讨论】:
-
尝试用大括号包裹表达式:
A.CallTo(() => { ... })。 -
@mellamokb 它不起作用,因为带有语句体 (
{...}) 的 Lambda 表达式无法转换为表达式树... -
啊,它需要一个
Expression<Action>(source link)。然后你可能必须明确地转换它,因为Action和Expression<Action>在技术上是模棱两可的:(Expression<Action>)(() => ... )。 -
我认为您应该将问题保留在原始状态以帮助 Google 员工。我在 Google 上搜索了“提出了一个假的很容易事件”并到达了这里,并且很困惑,因为相同的代码 sn-p 在答案和问题中。
标签: c# mocking fakeiteasy