Ответ 1
Вы можете использовать метод обратного вызова. Что-то вроде этого (из памяти):
var buffer = new byte[64];
// ...
mock.Setup(m => m.Read(buffer, offset, count))
.Callback((buffer, offset, count) => /* fill in buffer here */);
Можно ли изменить параметр вызова метода издевательства? В частности, я хочу изменить 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 выполнение выполняется после выполнения этой команды. Является ли мой синтаксис укушенным или это ошибка?
Вы можете использовать метод обратного вызова. Что-то вроде этого (из памяти):
var buffer = new byte[64];
// ...
mock.Setup(m => m.Read(buffer, offset, count))
.Callback((buffer, offset, count) => /* fill in buffer here */);