jmz*_*ski 2 c# fluent-interface fakeiteasy
我有一个到工厂接口的调用,该接口IMachine在命令处理程序中创建一个。IMachine从工厂返回的方法可以链接在一起,以在构建器类内部创建自己的方法。我FakeItEasy现在WithSpeeds遇到的问题是,除非我将每个方法调用都配置为返回false,否则它只能识别第一个调用(即)IMachine。有没有一种方法可以不配置每个单个调用,也可以不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)
};
}
Run Code Online (Sandbox Code Playgroud)
测试
[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);
}
Run Code Online (Sandbox Code Playgroud)
我认为,WithSpeeds和WithOils都返回了IMachine,是吗?
问题是:
_factory.CreateMachine返回一个IMachine,machine从你的设置machine.WithSpeeds返回由IMachineFakeItEasy组成的伪造品。这不是 machine,而是另一种假货,称其为“ machine2”machine2.WithOils 返回另一台假机器您的Assert块建议您期望在构建器链的每个步骤都返回同一台机器。尝试插入
A.CallTo(machine)
.WithReturnType<IMachine>()
.Returns(machine);
Run Code Online (Sandbox Code Playgroud)
后 A.CallTo(() => _factory.CreateMachine()).Returns(machine);
这样,machine它将继续返回自身,并且将在其上设置适当的属性,诸如此类。
| 归档时间: |
|
| 查看次数: |
414 次 |
| 最近记录: |