Как изменить параметр вызова смоделированного метода с Moq? - PullRequest
12 голосов
/ 02 февраля 2010

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

Пример:
int MockedClass.Read(byte[] buffer, int offset, int count)

Объяснение:
Вызов Read загружает count байт, считывающих из offset в предоставленный байтовый массив buffer.

Теперь я хотел бы заполнить буфер после вызова Read в коде моего приложения.Возможно ли это?

Если да, как мне поступить с последовательными звонками на Read?Я хотел бы, чтобы последовательные вызовы каждый раз возвращали новый буфер, если это возможно.

РЕДАКТИРОВАТЬ:

, используя команду 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 и модульный тествыполнение прекращается после выполнения этой команды.Мой синтаксис поврежден или это ошибка?

1 Ответ

15 голосов
/ 02 февраля 2010

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

var buffer = new byte[64];
// ...
mock.Setup(m => m.Read(buffer, offset, count))
    .Callback((buffer, offset, count) => /* fill in buffer here */);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...