【发布时间】:2021-12-06 20:56:58
【问题描述】:
鉴于我有一个这样的包装实例,其中 Resolve 方法注入依赖项
var handler = this.Resolve<DeletePaymentCardHandler>();
var wrapperHandler = A.Fake<DeletePaymentCardHandler>(
o => o.Wrapping(handler));
A.CallTo(() => wrapperHandler.EnsurePaymentCardCanBeDeleted(A<DeletePaymentCard>._, A<CancellationToken>._ ))
.Returns(Task.CompletedTask);
await wrapperHandler.Handle(command, CancellationToken.None);
'Handle' 方法是这样实现的
public async Task Handle(DeletePaymentCard msg, CancellationToken cancellationToken)
{
await this.EnsurePaymentCardCanBeDeleted(msg, cancellationToken);
var instance = await this.repository.GetById<Domain.CustomerFundingSources>(msg.CustomerId, cancellationToken);
instance.Process(msg);
await this.repository.Save(instance);
}
public virtual async Task EnsurePaymentCardCanBeDeleted(DeletePaymentCard command, CancellationToken cancellationToken)
{
return Task.CompletedTask
}
我观察到的是,不是在 Handle 中调用注入的存储库,而是调用由 FakeItEasy 创建的代理?
var instance = await this.repository.GetById<Domain.CustomerFundingSources>(msg.CustomerId, cancellationToken);
我认为重点是能够只拦截对某些方法的调用,其余的应该调用包装的实例方法? 来自文档:
"默认情况下,调用一个包装假的没有明确 配置将被转发到被包装的对象。”
【问题讨论】:
标签: fakeiteasy