2010-02-02 9 views
12

¿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?

Respuesta

14

Puede utilizar el método de devolución de llamada. Algo como esto (desde la memoria):

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

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? –

+0

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. –

Cuestiones relacionadas