Подтвердить что ты не робот

Как изменить параметр вызова метода mocked с помощью Moq?

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

Пример:
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);

дает мне странную проблему при выполнении unit test: после выполнения вызова Read и выполнения кода делегата (buffer[0] = 0xAA) отладчик показывает, что buffer на самом деле null, а unit test выполнение выполняется после выполнения этой команды. Является ли мой синтаксис укушенным или это ошибка?

4b9b3361

Ответ 1

Вы можете использовать метод обратного вызова. Что-то вроде этого (из памяти):

var buffer = new byte[64];
// ...
mock.Setup(m => m.Read(buffer, offset, count))
    .Callback((buffer, offset, count) => /* fill in buffer here */);