Ложный метод с параметрами IDbDataParameter - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь выполнить модульное тестирование функции, которая использует зависимость с некоторым интерфейсом. Я хочу издеваться над этим интерфейсом, используя moq. Интерфейс имеет такую ​​функцию:

int Command(CommandType commandType, string commandText, params IDbDataParameter[] parameters);

'Обычный' класс, реализующий интерфейс, будет использовать параметры IDbDataParameter и устанавливать для них некоторые значения. Эти значения затем используются в функции, которая вызывает командную функцию на интерфейсе. Кто-нибудь знает, как я настраиваю фиктивный объект, чтобы при вызове функции команды для фиктивного объекта он устанавливал значения для IDbDataParameter, который он получает в качестве входных данных?

Итак, функция, которую я хочу протестировать, и в которой Вызываемая командная функция выглядит следующим образом:

var pInput = DbDataParameter();
var pOutput = DbDataParameter();

Dependency.Command(Type, Name, pInput, pOutput);

if (pOutput.Value != null)
{
    Do Something
}

Я пытался использовать функцию обратного вызова, как показано ниже, но это не работает. Переменная массива - это массив, в котором значения устанавливаются так, как они необходимы в тестируемой функции.

Mock.Setup(o => o.Command(It.IsAny<CommandType>(), It.IsAny<string>(), It.IsAny<IDbDataParameter[]>())).
            Callback<CommandType, string, IDbDataParameter[]>((c, s, p) => p = array);

1 Ответ

0 голосов
/ 30 апреля 2020

Хорошо, я нашел ответ на свой вопрос. Проблема заключалась в том, что вы не можете присвоить значение массиву напрямую, поэтому (p = array) не работает. Однако можно присвоить значение значениям в массиве. Так что (p[1] = array[1]) сработало. Так, например:

    Mock.Setup(o => o.Command(It.IsAny<CommandType>(), It.IsAny<string>(), It.IsAny<IDbDataParameter[]>())).
        Callback<CommandType, string, IDbDataParameter[]>((c, s, p) => 
        {
            for (var i = 0; i < p.Length; i++)
            {
                p[i] = array[i]);
            }
        });
...