【问题标题】:Using FakeItEasy to have a faked method call raise an event?使用 FakeItEasy 让伪造的方法调用引发事件?
【发布时间】:2012-07-25 18:00:02
【问题描述】:

我正在尝试按照以下方式做一些事情:

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

fakeTimerITimer 的假冒,this answer 的包装接口。

显然这是行不通的,因为我无法在 Experssion Tree 中进行分配。

我真正想要实现的是在调用Start 方法时模拟引发计时器事件。这样我就可以断言确实发生了对Start 的调用。

任何(替代)想法?

编辑我是个白痴,错在我自己!我不小心添加了一个额外的A.CallTo,这是我不应该添加的。我不会删除这个问题,而是将其保留给Patrik Hägne 他应有的声誉:)

【问题讨论】:

  • 尝试用大括号包裹表达式:A.CallTo(() =&gt; { ... })
  • @mellamokb 它不起作用,因为带有语句体 ({...}) 的 Lambda 表达式无法转换为表达式树...
  • 啊,它需要一个Expression&lt;Action&gt; (source link)。然后你可能必须明确地转换它,因为 ActionExpression&lt;Action&gt; 在技术上是模棱两可的:(Expression&lt;Action&gt;)(() =&gt; ... )
  • 我认为您应该将问题保留在原始状态以帮助 Google 员工。我在 Google 上搜索了“提出了一个假的很容易事件”并到达了这里,并且很困惑,因为相同的代码 sn-p 在答案和问题中。

标签: c# mocking fakeiteasy


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2014-05-16
    相关资源
    最近更新 更多