作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我调用了一个工厂接口(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);
}
最佳答案
我认为 WithSpeeds
和 WithOils
都返回一个 IMachine
,是吗?
问题是:
_factory.CreateMachine
从您的设置中返回一台 IMachine
、machine
machine.WithSpeeds
返回 FakeItEasy 构建的假 IMachine
。这不是机器
,而是一个不同的假货,称之为“machine2”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/
我是一名优秀的程序员,十分优秀!