我正在尝试模拟 Masstransit 的 GetRetryAttempt() 方法以使用 NSubstitute 返回一些值,但似乎不起作用。没有收到任何错误,但 GetRetryAttempt() 始终返回 0 而不是 2。
测试
var context = Substitute.For<ConsumeContext<FakeCommand>>();
var consumeRetryContext = Substitute.For<ConsumeRetryContext>();
consumeRetryContext.RetryAttempt.Returns(2);
context.TryGetPayload(out consumeRetryContext).Returns(true);
context.GetRetryAttempt().Returns(consumeRetryContext.RetryAttempt);
申请代码
public async Task Consume(ConsumeContext<T> context)
{
......
var retryAttempt = context.GetRetryAttempt();
}
您没有正确模拟重试上下文。这有效
var context = Substitute.For<ConsumeContext<FakeCommand>>();
var consumeRetryContext = Substitute.For<ConsumeRetryContext>();
consumeRetryContext.RetryAttempt.Returns(2);
context
.TryGetPayload(out Arg.Any<ConsumeRetryContext>())
.Returns(result =>
{
result[0] = consumeRetryContext;
return true;
});