Mock and Stub – Hacer stub a método que tienen parámetros por referencia

La sintaxis de RhinoMocks constraints para aplicar en Stub o Expect a veces puede resultar compleja. Su documentación es bastante completa pero en algunos casos dificil de seguir o implementar.

A continuación te dejo una breve entrada sobre cómo puedes resolver la papeleta de hacer stub sobré métodos que tienen parámetros por referencia, esto puede resultarte útil tanto para unit test de tu capa de dominio, como para flow expectation test de tu capa de servicio.

Si por ejemplo tienes el siguiente método:

Una forma de incluirlo como parte de los expect de un test de flujo de llamadas, en la siguiente:

He introducido en el ejemplo mucho salto de línea y tabulación para diferenciar sus partes.

El método tiene 2 parámetros, el último es simplemente un string y solo le está haciendo referencia la último línea como en otros stubs que ya he ido presentando.

El importante es el primer parámetro, el cual es un parámetro por referencia. Dentro del Stub, que en este caso además es un Expect, se puede identificar como se indica “ref ” para indicar que el parametro es por referencia, de tipo Arg<Model.Business>, y  a continuación viene lo interesante:

Este método de rhinoMocks nos permite crear objetos Dummy que sean devueltos en los parámetros por referencia, y tiene 2 parámetros.

  • El primero hace referencia al tipo de constraints de RhinoMocks para considerar en el expect, si esperamos que el objeto que recibimos por referencia tenga algunas características concretas, en este caso para no continuar complicando el ejemplo, he optado por introducir Anything, siendo el mismo tipo de constraint que en el resto de stub que he presentado en el blog.
  • El segundo es el objeto resultante tras aplicar el método una vez es actualizado, sin más, de forma que esto simulará el comportamiento del método sobre el que aplicas stub.

Exactamente el mismo tipo de sintaxis puede utilizarse si en lugar de un Expect para un flow expectation test estas utilizando un stub para un unit test convencional.

Y listo, parece complejo dar con la fórmula de esta sintaxis, pero simplemente se trata de una buena documentación y un poco de práctica.

Un saludo.

Deja un comentario