Anotaciones útiles en entornos de testing Java

Categoría
Descripción

JUnit 4

JUnit 4 es el framework para el desarrollo de tests unitarios por excelencia en Java. Utiliza las siguientes anotaciones:

  • @Test: identifica un método como método test. Admite los parámetros:
    • expected = <clase_excepcion.class>ón.class> devuelve resultado fallido en caso de que no se lance la excepción indicada
      • En JUnit 5 se sustituye por Assertions.assertThrows(<clase_excepcion.class>).
    • timeout = <milisegundos> devuelve resultado fallido en caso de que la ejecución dure más de milisegundos.
      • En JUnit 5 se sustituye por Assertions.assertTimeout(<milisegundos>).
  • @Before: se ejecuta antes de cada test. Normalmente se utiliza para preparar el entorno de testing (por ejemplo: inicialización de clases, lectura de datos de entrada....).
  • @After: se ejecuta después de cada test. Normalmente se utiliza para limpiar el entorno de testing.
  • @BeforeClass: se ejecuta una vez, antes de comenzar todos los tests. Esto métodos deben definirse como static para trabajar con JUnit.
  • @AfterClass: se ejecuta una vez, cuando los tests han finalizado. Estos métodos deben definirse como static para trabajar con JUnit.
  • @Ignore: el método de test debe ser desactivado (no se ejecuta).

Spring Boot

Spring Boot dispone de sus propias anotaciones específicas

  • @RunWith(SpringRunner.class): ejecuta el test dentro de un Spring Context
    • Cuando se utiliza JUnit 5, se sustituye por @ExtendWith(SpringExtension.class).
  • @SpringBootTest: busca el Spring Boot Application para configurarse
  • @TestConfiguration: especifica una configuración de Spring para el test
  • @MockBean: inyecta un mock de Mockito
  • @SpyBean: inyecta un spy de Mockito
  • @JsonTest: crea un objeto mapper de Jackson o Gson vía Spring Boot
  • @WebMvcTest: se utiliza para testear un contexto web sin levantar un servidor Http completo
  • @DataJpaTest: sirve para probar la capa de datos con la base de datos embebida
  • @JdbcTest: es similar a @DataJpaTest, pero no configura el entity manager
  • @DataMongoTest: configura una base de datos MongoDB embebida para los tests
  • @RestClientTest: crea un servidor mock para probar clientes rest
  • @AutoConfigureRestDocs: permite el uso de Spring Rest Docs en los tests, creando documentación del API
  • @BootStrapWith: configura la forma en que el contexto de pruebas se arranca
  • @ContextConfiguration: indica a Spring cómo configurar el contexto para el test
  • @ContextHierarchy: permite crear una jerarquía del contexto con @ContextConfiguration
  • @ActiveProfiles: indica qué perfiles de Spring deberían estar activos para el test
  • @TestPropertySource: configura los orígenes para el test
  • @DirtiesContext: resetea el contexto de Spring después del test (es una operación costosa en tiempo)
  • @WebAppConfiguration: indica que Spring debería usar el contexto Web Application
  • @TestExecutionListeners: permite especificar los oyentes para los eventos del test
  • @Transactional: ejecuta el test en transacción, y hace un rollback cuando se completa por defecto
  • @BeforeTransaction: acción a ejecutar previa a iniciar la transacción
  • @AfterTransaction: acción a ejecutar tras la transacción
  • @Commit: especifica que se debe ejecutar commit sobre la transacción cuando el test ha finalizado.
  • @Rollback: especifica que se debe ejecutar un rollback sobre la transacción cuando el test ha finalizado. Esta es la acción por defecto
  • @Sql: especifica los scripts SQL a ejecutar antes de los tests
  • @SqlConfig: define los metadatos para los scripts Sql
  • @SqlGroup: grupo de anotaciones @Sql
  • @Repeat: repite el test X veces
  • @Timed: es similar al timeout de JUnit, pero espera a que se complete el test
  • @IfProfileValue: indica que el test sólo se ejecuta para un entorno de test específico
  • @ProfileValueSourceConfiguration: especifica una fuente para el valor del perfil

JUnit 5

  • @BeforeEach: se ejecuta antes de cada test. Normalmente se utiliza para preparar el entorno de testing (por ejemplo: inicialización de clases, lectura de datos de entrada....).
  • @AfterEach: se ejecuta después de cada test. Normalmente se utiliza para limpiar el entorno de testing.
  • @BeforeAll: se ejecuta una vez, antes de comenzar todos los tests. Esto métodos deben definirse como static para trabajar con JUnit.
  • @AfterAll: se ejecuta una vez, cuando los tests han finalizado. Estos métodos deben definirse como static para trabajar con JUnit.
  • @Disabled: el método de test debe ser desactivado (no se ejecuta).