1️⃣ Mantra

  • El código de prueba no es como el código de producción: diséñalo para que sea simple, corto, sin abstracciones, agradable de leer. Uno debe mirar una prueba y obtener la intención al instante.

2️⃣ Siglas y conceptos

  • SUT: System (Subject) Under Test. Lo que se está probando.

  • DOCs: Depended On Components. Lo que se necesita para que funcione el SUT.

3️⃣ Secciones: Arrange, Act & Assert (AAA Pattern)

  • Arrange: Prepara y organiza lo que necesitas.

  • Act: Ejecuta el código y obtén una respuesta.

  • Assert: Verifica que la respuesta es la esperada.

4️⃣ Cuestiones: Given, Should, Actual, Expected.

  • Given: 📃 Texto. Condiciones de la prueba. (Arrange)

  • Should: 📃 Texto. Funcionalidad esperada.

  • Actual: 🎰 Variable. El resultado obtenido. (Act)

  • Expected: 💰 Variable. La respuesta esperada. (Assert)

5️⃣ Test Doubles: Simuladores para no depender de las dependencias DOC.

  • Dummy: Datos requeridos para que el SUT funcione, pero que no se usan durante la prueba. (Carga previa de una base de datos)

  • Stub: Un objeto que cumpliendo una interfaz de un DOC tiene una respuesta constante y predeterminada. (Responder como lo haría un llamada http)

  • Fake: Un objeto que realiza una funcionalidad coherente pero simplificada de un DOC. (Simular una base de datos en memoria)

  • Spy: Cuenta las llamadas a una función o método. (Comprobar que se ejecuta una acción un determinado número de veces)

  • Mock: Monitoriza el uso de un objeto y las llamadas a una función junto con sus argumentos. (Simular un envío de correo completo)

6️⃣ Comprobaciones: igualdad, existencia, comparación, pertenencia, excepciones y negación

  • igualdad: El valor actual es igual al esperado.

  • existencia: El valor actual existe.

  • comparación: El valor actual es mayor o menor que el esperado.

  • pertenencia: El valor actual contiene o está contenido en el esperado.

  • excepciones: Se espera que una excepción sea lanzada.

  • negación: Niega cualquiera de los anteriores.

7️⃣ Consejos generales

  • incorpora herramientas: Puedes empezar de cero, pero hay muchas ayudas.

  • evita arreglos globales: Cada prueba deber ser autónoma e independiente.

  • datos realistas en los fakes: Nada de foo bar baz asdf

  • usa etiquetas o códigos: Útil para buscar resultados o pre filtrar pruebas.

  • public black box: Prueba los métodos públicos.

  • evita los mocks: Mejor usa Stubs y Spies.

  • haz alguna prueba: Esto no va de todo o nada.