通过操作轻松假装 - 说它找不到电话但显示在列表中

Fake it easy with actions - Says it can't find call but shows it in list

我像这样简单地使用 fake it :

var callBackAction = A.Fake<Action<object>>();

//act
token.RegisterChangeCallback(callBackAction, "hi");

//assert
A.CallTo(() => callBackAction.Invoke(A<object>.Ignored)).MustHaveHappened();

我收到错误

    FakeItEasy.ExpectationException : Assertion failed for the following call: 

    System.Action`1[System.Object].Invoke(obj: <Ignored>) Expected to find it 

    exactly once but found it #0 times among the calls: 

          1:     System.Action`1[System.Object].Invoke(obj: "hi)

我觉得这很奇怪。我能理解它是否找到了 none 或者它是否与重写 equals() 有关,但这很奇怪,因为它显然找到了我的电话并且我使用的是被忽略的但它没有匹配它们. 这与使用动作有关吗?

这是因为生成了一个等待条件的线程,然后在该线程中调用了操作。在测试中,此条件立即为真,因此线程 returns 非常快。这对于资产来说还不够快,因为在创建线程后立即发生这种情况,因此测试失败。但是,在断言失败之后和 FakeItEasy 完成收集针对错误消息发生的调用之前,将调用该操作。这导致 FakeItEasy 显示它作为错误消息的一部分被调用,尽管测试由于未被调用而失败。

这就是我的想法。