Haga que las pruebas unitarias sean legibles con Sensei y AssertJ

Publicado el 01 de diciembre de 2021
por Sean Flanigan
ESTUDIO DE CASO

Haga que las pruebas unitarias sean legibles con Sensei y AssertJ

Publicado el 01 de diciembre de 2021
por Sean Flanigan
Ver recurso
Ver recurso

Los desarrolladores crean y prueban su propio código con varios métodos. Uno de ellos es la prueba unitaria, un método muy popular para probar las partes más pequeñas del propio código. Cuando se escriben bien, las pruebas unitarias pueden ayudar a mejorar la calidad del código, así como a reducir los costes y el tiempo de desarrollo. Tanto si se hacen como parte del desarrollo dirigido por pruebas (TDD) como si no, las pruebas unitarias son una parte clave de las prácticas de desarrollo modernas y su importancia ha llevado a la creación de muchos marcos de pruebas.

Pero en ausencia de un marco de pruebas y una guía adecuados, las pruebas unitarias pueden volverse complejas e ilegibles, ya que el enfoque se centra en la cobertura y la cantidad en lugar de la calidad y la legibilidad. Esto es especialmente cierto en un código base grande y activo con muchas pruebas unitarias.

Un buen marco de pruebas ayuda a crear buenas pruebas legibles que son simples y se centran en las pruebas de calidad. También ayudan a documentar la forma de utilizar su código. Uno de estos marcos es AssertJ.

AssertJ es una API fluida para escribir pruebas unitarias en Java. Le permite escribir aserciones de prueba que se leen como si estuvieran en inglés, con autocompletado consciente del contexto. Si tienes un gran número de pruebas y necesitas mejorar su legibilidad, es posible que desees migrar todas ellas a AssertJ y también asegurarte de que todas las pruebas futuras están aprovechando al máximo AssertJ.

Pero la migración completa puede llevar un enorme esfuerzo y tiempo para hacerla manualmente, por lo que a menudo se omite o se pospone para otras tareas de desarrollo. Así que hemos creado Sensei - un plugin de IntelliJ altamente personalizable que puede ayudar a migrar tus pruebas unitarias actuales para utilizar AssertJ, así como permitir que todas las pruebas futuras se escriban de la manera correcta. Esto se hace con una serie de recetas (reglas) ya creadas para ti por el equipo de desarrollo de Sensei. Sensei hace que sea fácil realizar una migración única o tomar el enfoque de hacer migraciones incrementales a AssertJ, una prueba a la vez. Una vez que se ha migrado a AssertJ, las recetas siguen ayudando a los desarrolladores a aplicar correcciones rápidas a medida que escriben pruebas unitarias, de modo que sus pruebas unitarias siguen siendo uniformes, estándar y consistentes en todo el código base.

Vídeo de cómo establecer la regla del tamaño de AssertJ

Acerca de Sensei

Sensei es un plugin de IntelliJ altamente personalizable para escanear y arreglar código indeseable mientras se escribe, con cientos de transformaciones de código descargables y recetas de migración (reglas), así como una capacidad incorporada para crear las propias. Con Sensei, los desarrolladores pueden remediar los malos patrones de código mientras escriben, de modo que puedan entregar código de calidad más rápidamente y, en última instancia, escribirlo de forma coherente y estándar en todos los equipos y proyectos.

Aquí hay un ejemplo de una migración de muestra que puede ayudarte a ver cómo Sensei hace que sea fácil migrar tus pruebas unitarias para usar AssertJ.

Por qué AssertJ es un gran marco para escribir pruebas unitarias

En lugar de escribir una prueba como esta aserción de JUnit:

puedes escribir esto con AssertJ:

Esto significa que puedes leer la aserción de izquierda a derecha como una frase en inglés, y queda claro cuál es la expectativa (en este caso, el tamaño 3). ¿Cuántas veces has escrito una aserción al revés, así?

Estos son sólo ejemplos sencillos. Cuanto más complejas sean tus comprobaciones y aserciones, más te ayudará AssertJ a hacer tus pruebas simples y legibles. Funciona muy bien con el autocompletado de tu IDE. Tan pronto como escribas:

aparecerá con todas las cosas que puedes comprobar, según el tipo de miResultado. Si es una colección, puedes comprobar su contenido, su tamaño, si contiene ciertos valores o tipos, etc.

AssertJ tiene soporte para primitivas y sus tipos de caja, tipos atómicos, colecciones, arrays, mapas, fechas, java.time, futuros, archivos/rutas, flujos de entrada, lanzables y URLs. Y si tienes un Matcher personalizado favorito para Hamcrest, puedes utilizarlo con AssertJ a través de HamcrestCondition.

Las pruebas unitarias legibles facilitan a los desarrolladores la lectura del código en inglés normal y, por lo tanto, facilitan la detección de errores, así como el aumento de la cobertura, lo que convierte a AssertJ en un marco indispensable para las buenas pruebas unitarias de Java.

Recetas para trasladar las pruebas unitarias heredadas a AssertJ

Hemos escrito un libro de cocina para ayudarte a escribir código consistente con AssertJ. Puede ayudarte a migrar tus aserciones a AssertJ desde cualquiera de estos frameworks: JUnit 3, JUnit 4, JUnit 5 y FEST-Assert.

Este libro de cocina puede configurarse en Sensei para su uso inmediato y puede encontrar las instrucciones de instalación para Sensei aquí.

Escriba mejores pruebas unitarias a medida que codifica: mejore la calidad de JUnit progresivamente

El libro de cocina Sensei para AssertJ no sólo te ayuda a migrar desde otros frameworks. Tiene algunas recetas que pueden ayudarte a mejorar tu escritura de pruebas, romper viejos hábitos y escribir pruebas AssertJ más idiomáticas.

Por ejemplo, supongamos que ha escrito una prueba con el siguiente aspecto:

Tal vez incluso lo haya migrado utilizando una de las recetas de migración anteriores, a partir de esta aserción de estilo JUnit:

El libro de cocina Sensei para AssertJ tiene una receta que también puede detectar este viejo estilo de aserción, y ofrecer convertirlo en esto:

Otra receta puede convertir lo siguiente de:

a esto:

Una migración única y prácticas de codificación uniformes en todos los equipos, con Sensei

Podemos ver en nuestros ejemplos anteriores, que la migración manual de las pruebas unitarias para usar AssertJ puede implicar mucho esfuerzo y tiempo que es mejor invertir en escribir mejores pruebas. Utilizando Sensei, puedes migrar fácilmente tus pruebas unitarias a AssertJ con confianza. Puedes realizar una migración de una sola vez, o migrar pruebas individuales a AssertJ a medida que las encuentres. Sensei proporciona este tipo de flexibilidad que hace que las migraciones de código sean menos dolorosas.

La migración de pruebas unitarias es sólo un ejemplo de las muchas maneras en que Sensei puede utilizarse para escribir código coherente en todos tus proyectos. Siempre puedes estar atento a los anti-patrones o a ciertas transformaciones manuales de código que encuentras con frecuencia en los pull requests o mientras codificas tú mismo. Si tienes un conjunto de directrices de codificación que los desarrolladores no suelen tener en cuenta, puedes convertir las directrices en recetas, permitiendo a los desarrolladores aplicar transformaciones de código aprobadas con confianza.

Si tienes alguna pregunta, nos encantaría que nos la hicieras llegar. Únase a nosotros en Slack en: sensei-scw.slack.com

Ver recurso
Ver recurso

Autor

Sean Flanigan

¿Quieres más?

Sumérjase en nuestras últimas ideas sobre codificación segura en el blog.

Nuestra amplia biblioteca de recursos tiene como objetivo potenciar el enfoque humano de la mejora de la codificación segura.

Ver blog
¿Quieres más?

Obtenga las últimas investigaciones sobre la seguridad impulsada por los desarrolladores

Nuestra amplia biblioteca de recursos está repleta de recursos útiles, desde libros blancos hasta seminarios web, que le ayudarán a iniciarse en la codificación segura orientada a los desarrolladores. Explórela ahora.

Centro de recursos

Haga que las pruebas unitarias sean legibles con Sensei y AssertJ

Publicado el 01 de diciembre de 2021
Por Sean Flanigan

Los desarrolladores crean y prueban su propio código con varios métodos. Uno de ellos es la prueba unitaria, un método muy popular para probar las partes más pequeñas del propio código. Cuando se escriben bien, las pruebas unitarias pueden ayudar a mejorar la calidad del código, así como a reducir los costes y el tiempo de desarrollo. Tanto si se hacen como parte del desarrollo dirigido por pruebas (TDD) como si no, las pruebas unitarias son una parte clave de las prácticas de desarrollo modernas y su importancia ha llevado a la creación de muchos marcos de pruebas.

Pero en ausencia de un marco de pruebas y una guía adecuados, las pruebas unitarias pueden volverse complejas e ilegibles, ya que el enfoque se centra en la cobertura y la cantidad en lugar de la calidad y la legibilidad. Esto es especialmente cierto en un código base grande y activo con muchas pruebas unitarias.

Un buen marco de pruebas ayuda a crear buenas pruebas legibles que son simples y se centran en las pruebas de calidad. También ayudan a documentar la forma de utilizar su código. Uno de estos marcos es AssertJ.

AssertJ es una API fluida para escribir pruebas unitarias en Java. Le permite escribir aserciones de prueba que se leen como si estuvieran en inglés, con autocompletado consciente del contexto. Si tienes un gran número de pruebas y necesitas mejorar su legibilidad, es posible que desees migrar todas ellas a AssertJ y también asegurarte de que todas las pruebas futuras están aprovechando al máximo AssertJ.

Pero la migración completa puede llevar un enorme esfuerzo y tiempo para hacerla manualmente, por lo que a menudo se omite o se pospone para otras tareas de desarrollo. Así que hemos creado Sensei - un plugin de IntelliJ altamente personalizable que puede ayudar a migrar tus pruebas unitarias actuales para utilizar AssertJ, así como permitir que todas las pruebas futuras se escriban de la manera correcta. Esto se hace con una serie de recetas (reglas) ya creadas para ti por el equipo de desarrollo de Sensei. Sensei hace que sea fácil realizar una migración única o tomar el enfoque de hacer migraciones incrementales a AssertJ, una prueba a la vez. Una vez que se ha migrado a AssertJ, las recetas siguen ayudando a los desarrolladores a aplicar correcciones rápidas a medida que escriben pruebas unitarias, de modo que sus pruebas unitarias siguen siendo uniformes, estándar y consistentes en todo el código base.

Vídeo de cómo establecer la regla del tamaño de AssertJ

Acerca de Sensei

Sensei es un plugin de IntelliJ altamente personalizable para escanear y arreglar código indeseable mientras se escribe, con cientos de transformaciones de código descargables y recetas de migración (reglas), así como una capacidad incorporada para crear las propias. Con Sensei, los desarrolladores pueden remediar los malos patrones de código mientras escriben, de modo que puedan entregar código de calidad más rápidamente y, en última instancia, escribirlo de forma coherente y estándar en todos los equipos y proyectos.

Aquí hay un ejemplo de una migración de muestra que puede ayudarte a ver cómo Sensei hace que sea fácil migrar tus pruebas unitarias para usar AssertJ.

Por qué AssertJ es un gran marco para escribir pruebas unitarias

En lugar de escribir una prueba como esta aserción de JUnit:

puedes escribir esto con AssertJ:

Esto significa que puedes leer la aserción de izquierda a derecha como una frase en inglés, y queda claro cuál es la expectativa (en este caso, el tamaño 3). ¿Cuántas veces has escrito una aserción al revés, así?

Estos son sólo ejemplos sencillos. Cuanto más complejas sean tus comprobaciones y aserciones, más te ayudará AssertJ a hacer tus pruebas simples y legibles. Funciona muy bien con el autocompletado de tu IDE. Tan pronto como escribas:

aparecerá con todas las cosas que puedes comprobar, según el tipo de miResultado. Si es una colección, puedes comprobar su contenido, su tamaño, si contiene ciertos valores o tipos, etc.

AssertJ tiene soporte para primitivas y sus tipos de caja, tipos atómicos, colecciones, arrays, mapas, fechas, java.time, futuros, archivos/rutas, flujos de entrada, lanzables y URLs. Y si tienes un Matcher personalizado favorito para Hamcrest, puedes utilizarlo con AssertJ a través de HamcrestCondition.

Las pruebas unitarias legibles facilitan a los desarrolladores la lectura del código en inglés normal y, por lo tanto, facilitan la detección de errores, así como el aumento de la cobertura, lo que convierte a AssertJ en un marco indispensable para las buenas pruebas unitarias de Java.

Recetas para trasladar las pruebas unitarias heredadas a AssertJ

Hemos escrito un libro de cocina para ayudarte a escribir código consistente con AssertJ. Puede ayudarte a migrar tus aserciones a AssertJ desde cualquiera de estos frameworks: JUnit 3, JUnit 4, JUnit 5 y FEST-Assert.

Este libro de cocina puede configurarse en Sensei para su uso inmediato y puede encontrar las instrucciones de instalación para Sensei aquí.

Escriba mejores pruebas unitarias a medida que codifica: mejore la calidad de JUnit progresivamente

El libro de cocina Sensei para AssertJ no sólo te ayuda a migrar desde otros frameworks. Tiene algunas recetas que pueden ayudarte a mejorar tu escritura de pruebas, romper viejos hábitos y escribir pruebas AssertJ más idiomáticas.

Por ejemplo, supongamos que ha escrito una prueba con el siguiente aspecto:

Tal vez incluso lo haya migrado utilizando una de las recetas de migración anteriores, a partir de esta aserción de estilo JUnit:

El libro de cocina Sensei para AssertJ tiene una receta que también puede detectar este viejo estilo de aserción, y ofrecer convertirlo en esto:

Otra receta puede convertir lo siguiente de:

a esto:

Una migración única y prácticas de codificación uniformes en todos los equipos, con Sensei

Podemos ver en nuestros ejemplos anteriores, que la migración manual de las pruebas unitarias para usar AssertJ puede implicar mucho esfuerzo y tiempo que es mejor invertir en escribir mejores pruebas. Utilizando Sensei, puedes migrar fácilmente tus pruebas unitarias a AssertJ con confianza. Puedes realizar una migración de una sola vez, o migrar pruebas individuales a AssertJ a medida que las encuentres. Sensei proporciona este tipo de flexibilidad que hace que las migraciones de código sean menos dolorosas.

La migración de pruebas unitarias es sólo un ejemplo de las muchas maneras en que Sensei puede utilizarse para escribir código coherente en todos tus proyectos. Siempre puedes estar atento a los anti-patrones o a ciertas transformaciones manuales de código que encuentras con frecuencia en los pull requests o mientras codificas tú mismo. Si tienes un conjunto de directrices de codificación que los desarrolladores no suelen tener en cuenta, puedes convertir las directrices en recetas, permitiendo a los desarrolladores aplicar transformaciones de código aprobadas con confianza.

Si tienes alguna pregunta, nos encantaría que nos la hicieras llegar. Únase a nosotros en Slack en: sensei-scw.slack.com

Nos gustaría contar con su permiso para enviarle información sobre nuestros productos y/o temas relacionados con la codificación segura. Siempre trataremos sus datos personales con el máximo cuidado y nunca los venderemos a otras empresas con fines de marketing.

Enviar
Para enviar el formulario, habilite las cookies "Analytics". Siéntase libre de desactivarlas de nuevo una vez que haya terminado.