Как подделать бросок исключения? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть следующие настройки

A.CallTo(() => fakeChargeService
       .CreateAsync(A<ChargeCreateOptions>._, A<RequestOptions>._, A<CancellationToken>._))
 .Throws<StripeException>((se) => stripeException);

, а затем я утверждаю

 var msg = await Assert.ThrowsAsync<StripeException>(async () => await mediator.Send(command, CancellationToken.None));

, который в конечном итоге выполняет этот кусок кода

        var policyResult = await Policy.Handle<StripeException>(x => x.ShouldRetry())
                                       .WaitAndRetryAsync(new[]
                                       {
                                           TimeSpan.FromSeconds(0.5),
                                           TimeSpan.FromSeconds(1),
                                           TimeSpan.FromSeconds(2),
                                       })
                                       .ExecuteAndCaptureAsync(async () => await this.chargeService.CreateAsync(options, null, cancellationToken));

и здесь я получаю ошибку

Assert.Throws () Ожидаемый сбой: typeof (Stripe.StripeException) Actual: typeof (FakeItEasy.Configuration.FakeConfigurationException): поддельный метод имеет подпись (Stripe.ChargeCreateOptions, Stripe.RequestOptions, System.Threading.CancellationToken), но броски использовались с (Stripe.StripeException).

Я не уверен, что я делаю неправильно.Любая помощь будет оценена

1 Ответ

0 голосов
/ 06 февраля 2019

Похоже, вы указали неверную подпись в вашем Throws.CreateAsync занимает (Stripe.ChargeCreateOptions, Stripe.RequestOptions, System.Threading.CancellationToken), но Throws использовалось с (Stripe.StripeException).

См. Второй пример в Исключения броска :

// Pass up to 4 original call argument values into the method that creates the exception.
A.CallTo(() => fakeShop.NumberOfSweetsSoldOn(A<DateTime>._))
 .Throws((DateTime when)=>new InvalidDateException(when + " is in the future"));

Обратите внимание, чтоПодпись лямбды и вызываемый метод совпадают.

Вы должны обновить свою лямбду, чтобы она соответствовала правильной подписи.Или, что еще лучше, просто замените на

.Throws<StripeException>(stripeException)

, поскольку нет никаких причин лениво бросать, основываясь на предоставленном вами фрагменте кода.

...