Как смоделировать универсальный метод с параметром делегата - PullRequest
1 голос
/ 08 мая 2019

В абстрактном классе у меня есть виртуальный метод с этой подписью.

public virtual async Task<TResult> MethodAsync<TParameters, TResult>(
        CommandFactory<TParameters> commandFactory,
        TParameters parameters,
        ModelAdapter<TResult> modelAdapter)
    { // method body }

CommandFactory и ModelAdapter являются делегатами с этой подписью.

public delegate DbCommand CommandFactory<in TParameters>(
    DbConnection connection,
    TParameters parameters);

public delegate TResult ModelAdapter<out TResult>(DbDataReader dataReader);

Как издеваться MethodAsync, используя Moq

1 Ответ

1 голос
/ 08 мая 2019

Его можно настроить как любой другой виртуальный или абстрактный член

var mock = new Mock<MyAbstractClass>();
string expectedResult = "Hello World";
mock
    .Setup(_ => 
        _.MethodAsync(
            It.IsAny<CommandFactory<string>>(),
            It.IsAny<string>(),
            It.IsAny<ModelAdapter<string>>())
        )
    .ReturnsAsync(expectedResult);

Приведенный выше пример упрощает использование строк только для демонстрации использования общих параметров.

It.IsAnyаргумент matcher был использован для установки ожиданий для параметров метода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...