Mock and Stub – Hacer stub a propiedades privadas de una clase

En ocasiones he necesitado modificar el comportamiento de una propiedad privada de una clase, por ejemplo porque esa propiedad sea una clase de un repositorio en una arquitectura basada en Unit of Work y Repository Pattern como la que comento en esta otra entrada.

Esto es muy fácil de hacer con librerías de testing como pueda ser Rhino Mocks. 

Posible situación práctica

Supongamos que tenemos la siguiente interfaz de nuestra unidad de trabajo:

Esas interfaces de IRepository podrían ser las siguientes:

La implementación de la unidad de trabajo sería algo así:

Para acceder a la propiedad privada postRepository tenemos una propiedad pública PostRepository de solo lectura que devolverá el postRepository.

Por lo tanto cuando desde un método que trabaja con nuestra nuestra unidad de trabajo IContext queramos por ejemplo borrar un post deberemos aplicar lo siguiente:

Esta es la línea a la que queremos aplicar un stub en el unit test del método que llama a nuestra unidad de trabajo para borrar un post.

Solución

Esto lo podemos hacer de la siguiente manera:

De esta forma ya tenemos “context” y “postRepository” listos para ser usados en los test.

En relación a la línea de código donde se usa el Delete, lo único que habría que hacer en el test antes de hacer la llamada al método que contiene dicha línea, es lo siguiente:

De esta forma estamos usando un stub del método Delete cuando llamemos al repositorio postRepository que hemos creado con MockRepository.GenerateMock<IRepository<Post>>(), y por otro lado cuando usemos la propiedad PostRepository de context, estaremos devolviendo el repositorio creado anteriormente con el stub configurado.

Pues esto es todo para esta entrada, próximas entradas continuaré indicando como resolver aspectos relacionados con el unit testing.

Un saludo.

 

Deja un comentario