En el proyecto de Testing se ha utilizado Machine.Specifications (MSpec) para realizar Behavior Driven Development (BDD).
MSpec utiliza las cláusulas Establish/Because/It equivalente a Given/When/Then disponible en otros frameworks como SpecFlow.
La forma de uso seria la siguiente:
- Establish: Se usa para establecer el estado inicial.
- Because: Definimos la acción que vamos a testear.
- It: Comprobamos que el resultado es el esperado.
una única acción. Si necesitamos más de una línea en Because significará seguramente que hemos establecido un contexto demasiado grande.
En el caso que nos ocupa se ha creado una clase abstracta para establecer configuraciones iniciales para todos los casos de test. Podemos ver como se ha creado un Mock del ServiceLocator usado por la clase DomainEvents y como también se ha establecido la cláusula Cleanup para que en cada test se vacíe la lista de callbacks de los eventos de dominio. Además, hemos creado un método Factory para instanciar el agregado Project con algunos datos por defecto.
|
|
Veremos a continuación tres ejemplos diferentes de escenarios de test.
En el primero vamos a probar lo siguiente:
Cuando cerramos un proyecto, se debe crear un evento ProjectClosedEvent
|
|
La segunda prueba será la siguiente:
Cuando cerremos un proyecto, si el proyecto ya está cerrado no debe lanzarse el evento ProjectClosedEvent
|
|
Finalmente, la tercera prueba será la siguiente:
Cuando desactivamos un proyecto cerrado, debe lanzarse una excepción del tipo ProjectIsClosedException
|
|
La salida que obtenemos cuando ejecutamos el proyecto de test mediante línea de comandos es la siguiente:
Project, when closing a project
» should create a projectclosed event
Project, when closing a closed project
» project closed event should be null
Project, when deactivating a closed project
» should rise a project is closed exception