Prueba unitaria de C # con NUnit y .NET Core)

Nunit

¿Te gustaría aprender Frameworks .NET Empresariales?
Tenemos los cursos que necesitas. ¡Haz clic aquí!

Una tarea que nos suele generar algunos dolores de cabeza con las pruebas unitarias es cuando tenemos implementado patrones como el Repository Pattern en nuestro código o el acceso a los servicios se resuelve vía inyección por dependencia (DI Pattern).

En el siguiente artículo daré algunos tips y framework’s que me han servido mucho para ir resolviendo y acelerando la construcción de piezas con foco en TDD sin tener que lidiar demasiado con la configuración del proyecto de pruebas.

Sin entrar en mayores detalles entorno al proyecto que se está desarrollando la estructura que suelo utilizar para subdividir la arquitectura del mismo es la construcción en capas:

Gecap.Data

Contiene toda la infraestructura de acceso a datos a través de Entity Framework, NUnit.

Gecap.Business

Repository

Contiene toda la lógica de negocios del proyecto y la estructura base de los repositorios de acceso a la base de datos. En esta capa se implementan 2 patrones que considero útiles: Repository Pattern y Unit Of Work. A través del repositorio base puedo implementar la lógica genérica de un CRUD e ir creciendo en la medida en que las necesidades del proyecto así lo manifiesten. En el caso de Unit Of Work me provee un acceso unificado o una sola unidad de trabajo a todos los repositorios de acceso a la base de datos (a través de Entity Framework), haciendo más sencillo el proceso de testing.

Unit of Work

En esta capa además se proveen los servicios que son los que se exponen a los clientes. Cada servicio puede tener acceso a uno o más repositorios dependiendo de la lógica de negocios que intente satisfacer, el acceso a los repositorios es a través de Unit Of Work.

Services

En el caso del servicio anterior se retorna una lista de modelos que son copias casi exactas de las entidades que provee Entity Framework.

Gecap.WebApp

Corresponde a la aplicación web que mostrará a los usuarios las funcionalidades a través de diferentes interfaces de usuario. En la app web los servicios se inyectan a través del framework Unity:

Inyección de servicios en la app web

Testing

Descripción detallada de las librerías utilizadas:

Moq: El término mock, técnicamente en castellano significa burlarse, y en este contexto no tiene sentido, pero uno de sus sinónimos es “mimic” el cual significa mímica, que es lo mismo que imitar. Excelente explicación de Netmentor en su blog.

NUnitNUnit es un framework open source de Pruebas de unidad para Microsoft .NET y Mono. Sirve al mismo propósito que JUnit realiza en el mundo Java, y es uno de muchos en la familia xUnit.

Unity: framework que provee la infraestructura necesaria para implementar dos patrones de diseño: IoC (Inversion Of Control) y DI (Dependency Injection). Ejemplo

Estructura de la prueba unitaria

Configurando la prueba unitaria

Construyendo el SetUp de la prueba unitaria

Lo primero que debemos hacer es declarar a nivel de clase la variable que se usará para guardar el “contenedor” de Unity y el “Imitador” de las evaluaciones, que corresponde al Mock de la interfaz del servicio.

El método init corresponde al “configurador” de la prueba unitaria, ahí se levanta el contenedor, el Mock y se registra dicho Mock en el contenedor.

Construyendo la prueba unitaria

Construyendo la prueba unitaria

Inicialmente se resuelve la clase EvaluacionService que anteriormente se había registrado en el SetUp, luego obtenemos desde el servicio las evaluaciones por establecimiento según la regla de negocio que queramos probar. Finalmente se evalúa si el objeto es distinto de NULL y si la lista contiene al menos una evaluación.

Ejecutando y depurando

Datos que deberíamos obtener desde la base de datos

Ponemos un punto de interrupción en el código del test y ejecutamos el debug:

Evaluando el resultado de la prueba

Verificamos en el visor de variables:

Verificando el resultado en el QuickWatch

Tenemos ya los mismos 3 resultados que obtuvimos desde la consulta a la BD

Resultado final de la prueba

Te esperamos en los siguientes artículos en donde hablaremos más acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.

¿Te gustaría aprender Frameworks .NET Empresariales?
Tenemos los cursos que necesitas. ¡Haz clic aquí!

About Author

NGuerrero

0 0 votos
Article Rating
Suscribir
Notificar de
guest
2 Comments
La mas nueva
Más antiguo Más votada
Comentarios.
Ver todos los comentarios
trackback
1 Año Texto atrás

[…] puede decir que se debería automatizar cualquier prueba que presente la oportunidad de hacerlo. Supone una gran ganancia en productividad y coste de tiempo […]

trackback
2 Años Texto atrás

[…] diseñado para el desarrollo de aplicaciones a gran escala y supera cómodamente a otros frameworks web. Tiene uno de los mejores soportes de herramientas, ya […]

2
0
¿Te gusta este articulo? por favor comentax