gpt4 book ai didi

c# - FakeItEasy 断言方法调用方法

转载 作者:行者123 更新时间:2023-11-30 15:14:11 24 4
gpt4 key购买 nike

我有一个用 FakeItEasy v2.2.0 编写的单元测试。

测试测试一个方法,让调用它MethodA调用MethodB

简单类:

public class Foo
{
public virtual void MethodA()
{
MethodB();
}

public virtual void MethodB() { }
}

简单测试:

var foo_fake = A.Fake<Foo>(options => options.CallsBaseMethods());

foo_fake.MethodA();

A.CallTo(() => foo_fake.MethodA()).MustHaveHappened()
.Then(A.CallTo(() => foo_fake.MethodB()).MustHaveHappened());

使用 FakeItEasy 2.2.0,代码通过。

但是当我们升级到 5.1.0 时,代码会抛出异常:

The calls were found but not in the correct order among the calls

当我们说方法被调用时?在执行开始时还是在执行结束时?

或者,测试这个案例的正确方法是什么?

最佳答案

更新:这是一个错误,现已修复。截至FakeItEasy 5.1.1 , 行为恢复到 2.2.0 中的状态


我们会记录通话结束后进行的通话,因此在您的情况下,订单将是

  • 执行方法A
  • 执行方法B
  • 记录方法B发生的情况
  • 记录发生的方法A

但是,在 3.4.2 中,我们发布了对 Setting ref argument values masks incoming argument values used to verify calls 的修复。 .这将我们记录调用“序列号”的位置从 CaSTLeInvocationCallAdapter 移动到了 FakeManager。前者会在调用 methodB 之前记录 methodA 的调用。

很遗憾这会破坏您的用例。我认为新行为是一个错误,并创建了问题 #1583 - Calls are recorded after applying the best rule, not when received在 GitHub 上。

不过,就我个人而言,我会查看测试(我认为它比您在此处介绍的更复杂)。我会接受@Nikosi 的建议,而不检查通话顺序。知道它们都被调用了(或者甚至只是调用了 methodB)可能就足够了。

关于c# - FakeItEasy 断言方法调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55675942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com