gpt4 book ai didi

C# FakeItEasy 和方法链接 : Only First Call Is Recognized

转载 作者:行者123 更新时间:2023-12-02 10:59:24 24 4
gpt4 key购买 nike

我调用了一个工厂接口(interface),该接口(interface)在命令处理程序中创建一个IMachine。从工厂返回的 IMachine 具有可以链接在一起以在构建器类内部创建自身的方法。我现在使用 FakeItEasy 遇到的问题是,它只能识别第一个调用(即 WithSpeeds),除非我将每个方法调用配置为返回一个假 机器。有没有办法不配置每个调用或让 FakeItEasy 识别链上的每个方法调用?我知道我一定做错了什么,因为如果我使用 OrderAssertions,并且在没有设置我的假机器的情况下故意使订单失败,它会显示对所有方法进行了调用。感谢您的帮助。

命令处理程序方法的一部分

public void Handle(FooCommand commandParm)
{
var entity = new Entity.Builder
{
Machine = _factory.CreateMachine(commandParm.MachineName)
.WithSpeeds(commandParm.ProcessingSpeed, commandParm.StartupSpeed, commandParm.ShutDownSpeed)
.WithOils(commandParm.Lubrication, commandParm.FinishingOil)
};
}

测试

[TestMethod]
public void HandleSetMachineSettings_should_build_machine()
{
// Arrange
var settings = CommandUtilities.ReturnFooCommand();
var _factory = A.Fake<IMachineFactory>();
var machine = A.Fake<IMachine>();
A.CallTo(() => _factory.CreateMachine(settings.MachineName)).Returns(machine);

// Act
_handler.Handle(settings);

// Assert
machine.Should().NotBeNull();
A.CallTo(machine).Where(x => x.Method.Name.Equals("set_MachineNumber")).WhenArgumentsMatch(arg => arg.Get<int>(0) == settings.MachineNumber).MustHaveHappened(Repeated.Exactly.Once);
A.CallTo(() => machine.WithSpeeds(commandParm.ProcessingSpeed, commandParm.StartupSpeed, commandParm.ShutDownSpeed)).MustHaveHappened(Repeated.Exactly.Once);
A.CallTo(() => machine.WithOils(commandParm.Lubrication, commandParm.FinishingOil)).MustHaveHappened(Repeated.Exactly.Once);
}

最佳答案

我认为 WithSpeedsWithOils 都返回一个 IMachine,是吗?

问题是:

  1. _factory.CreateMachine 从您的设置中返回一台 IMachinemachine
  2. machine.WithSpeeds 返回 FakeItEasy 构建的假 IMachine。这不是机器,而是一个不同的假货,称之为“machine2”
  3. machine2.WithOils 返回另一台假机器

您的断言 block 表明您希望在构建器链的每个步骤返回相同机器。尝试插入

A.CallTo(machine)
.WithReturnType<IMachine>()
.Returns(machine);

A.CallTo(() => _factory.CreateMachine()).Returns(machine);

之后

这样machine将不断返回自身,并且将在其上设置适当的属性等等。

关于C# FakeItEasy 和方法链接 : Only First Call Is Recognized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28480536/

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