TDD Mock validate.ValidateAsync метод - PullRequest
       17

TDD Mock validate.ValidateAsync метод

0 голосов
/ 26 апреля 2018

Я пишу свой модульный тест, и у нас есть метод, который вызывает ручную проверку с передачей RuleSet имени.

Я не могу смоделировать мой IValidator<RequestObj>.ValidateAsync() метод.

Пример ложного утвержденияЯ использовал

mockValidator.Setup(x => x.ValidateAsync(It.IsAny<SampleRequest>(), It.IsAny<CancellationToken>(), It.IsAny<IValidatorSelector>(), It.IsAny<string>()))
             .ReturnsAsync(new ValidationResult());

Я получаю следующую ошибку

Неверная настройка для метода расширения: x => x.ValidateAsync (It.IsAny (), It.IsAny (), It.IsAny (), It.IsAny ()) в Moq.Mock.ThrowIfSetupExpressionInvolvesUnsupportedMember (настройка выражений, метод MethodInfo)

Пожалуйста, сообщите мне о правильном подходе.

1 Ответ

0 голосов
/ 26 апреля 2018

вы можете издеваться над Validate.ValidateAsync.

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

public static Task<ValidationResult> ValidateAsync<T>(this IValidator<T> validator, T instance, CancellationToken cancellationToken = default (CancellationToken), IValidatorSelector selector = null, string ruleSet = null)

Но если вы видите его реализацию, она вызывает

validator.ValidateAsync((ValidationContext) validationContext, cancellationToken);

Так что создание Mock на основе вышеуказанной сигнатуры решает проблему.

mockValidator.Setup(x => x.ValidateAsync(It.IsAny<ValidationContext>(), It.IsAny<CancellationToken>()))
                             .ReturnsAsync(new ValidationResult());

Если вы хотите передать ошибки проверки

mockValidator.Setup(x => x.ValidateAsync(It.IsAny<ValidationContext>(), It.IsAny<CancellationToken>()))
                             .ReturnsAsync(new ValidationResult(new List<ValidationFailure>()
                             {
                                 new ValidationFailure("TestField","Test Message"){ErrorCode = "1001"}
                             }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...