Возможно ли изменить параметр вызова метода издевательства? В частности, я хочу изменить buffer
в следующем примере на предварительно заполненный массив байтов.Как изменить параметр вызова издевающегося метода с помощью Moq?
Пример:
int MockedClass.Read(byte[] buffer, int offset, int count)
Пояснение:
Вызов Read
загружает байт count
чтение из offset
в комплект поставки массива байтов buffer
.
Теперь я хотел бы иметь буфер, заполненный после вызова Read
был сделан в моем коде приложения. Это возможно?
Если да, то как я могу сделать последовательные звонки на Read
? Я хотел бы, чтобы последовательные вызовы возвращали разные буферы каждый раз, когда это было возможно.
EDIT:
используя Setup
команду:
MockedClass.Setup(x => x.Read(It.IsAny<byte[]>(), It.IsAny<int>(), It.IsAny<int>()).Callback((byte[] buffer, int offset, int count) => buffer[0] = 0xAA);
дает мне странные проблемы при выполнении теста блока: После того, как вызов Read
производится и код делегата (buffer[0] = 0xAA
) выполнен, отладчик показывает, что buffer
на самом деле null
, и выполнение тестового блока останавливается после выполнения этой команды. Является ли мой синтаксис оборванным или это ошибка?
Hi Mark. Спасибо за ответ. Если я использую этот шаблон, мой модульный тест будет просто остановлен в тот момент в обратном вызове, когда делегат будет выполнен. Отладка проблемы показала, что массив байтовых буферов равен «null». Любые идеи, почему это может произойти? –
Это значение равно null, если вы не назначили его. Вышеуказанный вызов Setup не * присваивает * буферную переменную - он соответствует существующей переменной. В вашем редактировании вы соответствуете 'It.IsAny()', но вызывающий должен по-прежнему указывать значение. –