¿Es posible modificar un parámetro de invocación de un método simulado? En particular, estoy buscando cambiar buffer
en el siguiente ejemplo a una matriz de bytes pre-poblada.Cómo modificar un parámetro de invocación de un método simulado con Moq?
Ejemplo:
int MockedClass.Read(byte[] buffer, int offset, int count)
Explicación:
Calling Read
cargas count
bytes de lectura de offset
en la matriz de bytes suministrada buffer
.
Ahora me gustaría llenar el búfer después de que se haya realizado la llamada a Read
en el código de mi aplicación. ¿Es eso posible?
En caso afirmativo, ¿cómo voy a hacer las llamadas sucesivas al Read
? Me gustaría que las llamadas sucesivas devuelvan un búfer diferente cada vez que sea posible.
EDIT:
usando el comando Setup
así:
MockedClass.Setup(x => x.Read(It.IsAny<byte[]>(), It.IsAny<int>(), It.IsAny<int>()).Callback((byte[] buffer, int offset, int count) => buffer[0] = 0xAA);
me da un extraño problema al ejecutar la prueba de unidad: Una vez que se realiza la llamada a Read
y el código de delegado (buffer[0] = 0xAA
) se ejecuta el depurador muestra que buffer
es realmente null
y la ejecución de prueba de la unidad se detiene después de ejecutar este comando. ¿Mi sintaxis es borked o es eso un error?
Hi Mark. Gracias por la respuesta. Si uso este patrón, la prueba de mi unidad se detendrá en el mismo punto de la devolución de llamada cuando se ejecute el delegado. La depuración del problema mostró que la matriz de bytes del buffer es 'null'. ¿Alguna idea de por qué podría suceder eso? –
Es nulo a menos que lo asigne. La llamada de configuración anterior no * asigna * la variable del búfer - coincide con una variable existente. En su edición, coincide en 'It.IsAny()', pero la persona que llama aún debe proporcionar el valor. –