Modificación de la visibilidad de métodos y clases para JUnit 5
Modificación de la visibilidad de métodos y clases para JUnit 5
Modificación de la visibilidad de métodos y clases para JUnit 5
Una de las alegrías de la programación es el aprendizaje constante que se requiere para mantenerse al día. Uno de los problemas es que acumulamos familiaridad y patrones de uso que pueden afectar a la adopción de nuevos enfoques. Sensei puede ayudar a la migración identificando patrones obsoletos e indicándonos la solución que debemos utilizar en el futuro.
Como ejemplo, cuando migré de JUnit 4 a JUnit 5, estaba acostumbrado a escribir todas mis clases y métodos de prueba como públicos. Pero con JUnit 5 pueden ser paquetes privados.
Por ejemplo, en lugar de:
public class Junit5VisibilityTest {
@Test
public void thisDoesNotNeedToBePublic(){
Assertions.assertTrue(true);
}
}
Tengo muchas ganas de escribir:
class Junit5VisibilityTest {
@Test
void thisDoesNotNeedToBePublic(){
Assertions.assertTrue(true);
}
}
Me llevó un tiempo crear la memoria muscular para codificar con esto, y todavía me equivoco de vez en cuando.
Utilizando Sensei
Con Sensei puedo crear recetas que encuentren los métodos y clases públicas, y modifiquen las declaraciones para que sean privadas del paquete automáticamente.
Para ello, he creado una receta:
Nombre - JUnit: Los métodos de prueba de JUnit 5 no necesitan ser públicos
Descripción - Los métodos de prueba de JUnit 5 no necesitan visibilidad pública
Nivel - Error
Lo he clasificado como Error porque quiero acabar con esta práctica de codificación y quiero que el problema sea más visible cuando esté escribiendo código en el IDE.
Modificación de la declaración de clase
Para encontrar las clases, busco cualquier clase que tenga una anotación hija de @Test de Junit 5, es decir, org.junit.jupiter.api.Test
Y donde la clase tiene el modificador public:
search:
class:
with:
child:
annotation:
type: "org.junit.jupiter.api.Test"
modifier: "public"
Entonces la solución rápida cambia el modificador para eliminar la visibilidad para que sea la predeterminada, y la predeterminada es paquete privado que es lo que estoy buscando.
availableFixes:
- name: "remove public visibility from JUnit 5 Test class"
actions:
- changeModifiers:
visibility: ""
Modificación de las declaraciones de métodos
La receta de modificación de la declaración del método es muy parecida a la receta de la clase.
Primero busco los métodos públicos anotados con @Test de JUnit 5.
search:
method:
annotation:
type: "org.junit.jupiter.api.Test"
modificador: "public"
Y luego cambio el modificador para que sea la visibilidad por defecto.
availableFixes:
- name: "Remove @Test method public visibility"
actions:
- changeModifiers:
visibility: ""
Sugerencia: Modificación de varios métodos
Sensei tiene la capacidad de aplicar el QuickFix a todas las violaciones en el archivo actual.
Cuando uso alt+enter para aplicar el QuickFix.
Si despliego el menú de nombres de QuickFix, puedo ver una opción para:
"Arreglar todo: 'JUnit: Los métodos de prueba de JUnit 5 no necesitan ser públicos' problemas en el archivo"
Si selecciono esa opción, Sensei modificará todas las incidencias del problema, no sólo la que yo seleccione.
Modificación de la clase
De la misma manera que un método no necesita ser público, tampoco lo necesita la clase.
Puedo crear una receta y un QuckFix para modificar la clase.
Nombre - JUnit: Las clases de prueba de Junit 5 no necesitan ser públicas
Descripción - Las clases de prueba de Junit 5 no necesitan ser públicas
Nivel - Error
Cuando encuentro una clase que es pública y tiene un método con una anotación @Test. Entonces quiero cambiar la visibilidad.
búsqueda:
clase:
modificador: "public"
anyOf:
- child:
method:
annotation:
type: "Test"
Puedo volver a realizar el cambio en la definición de la clase con la acción changeModifiers.
availableFixes:
- name: "Remove @Test class public visibility"
actions:
- changeModifiers:
visibility: ""
Resumen
Una herramienta de análisis estático me alertó inicialmente de este enfoque recomendado en JUnit. Pero la herramienta de análisis estático no me ayudó a construir la memoria muscular para cambiar mi código mientras programo.
Utiliza el 'Nivel' para alertarte. Cuando se trata de un problema que estoy tratando de eliminar en mi codificación, inicialmente lo pongo como 'Error' y luego lo reduzco a medida que me alejo del enfoque de la codificación.
Recuerde que puede utilizar Sensei para arreglar todos los problemas del archivo actual al mismo tiempo, utilizando la opción del menú desplegable al aplicar el QuickFix.
Al crear una receta en Sensei , puedo ver mi antiguo enfoque de codificación en tiempo real. Y QuickFix, para reforzar el enfoque si de vez en cuando me equivoco en la codificación.
---
Puede instalar Sensei desde IntelliJ usando "Preferences \ Plugins" (Mac) o "Settings \ Plugins" (Windows) y luego sólo busque "sensei secure code".
El código fuente y las recetas para esto se pueden encontrar en el repositorio `sensei-blog-examples` en la cuenta GitHub de Secure Code Warrior , en el módulo `junitexamples`.
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.
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.
Modificación de la visibilidad de métodos y clases para JUnit 5
Modificación de la visibilidad de métodos y clases para JUnit 5
Una de las alegrías de la programación es el aprendizaje constante que se requiere para mantenerse al día. Uno de los problemas es que acumulamos familiaridad y patrones de uso que pueden afectar a la adopción de nuevos enfoques. Sensei puede ayudar a la migración identificando patrones obsoletos e indicándonos la solución que debemos utilizar en el futuro.
Como ejemplo, cuando migré de JUnit 4 a JUnit 5, estaba acostumbrado a escribir todas mis clases y métodos de prueba como públicos. Pero con JUnit 5 pueden ser paquetes privados.
Por ejemplo, en lugar de:
public class Junit5VisibilityTest {
@Test
public void thisDoesNotNeedToBePublic(){
Assertions.assertTrue(true);
}
}
Tengo muchas ganas de escribir:
class Junit5VisibilityTest {
@Test
void thisDoesNotNeedToBePublic(){
Assertions.assertTrue(true);
}
}
Me llevó un tiempo crear la memoria muscular para codificar con esto, y todavía me equivoco de vez en cuando.
Utilizando Sensei
Con Sensei puedo crear recetas que encuentren los métodos y clases públicas, y modifiquen las declaraciones para que sean privadas del paquete automáticamente.
Para ello, he creado una receta:
Nombre - JUnit: Los métodos de prueba de JUnit 5 no necesitan ser públicos
Descripción - Los métodos de prueba de JUnit 5 no necesitan visibilidad pública
Nivel - Error
Lo he clasificado como Error porque quiero acabar con esta práctica de codificación y quiero que el problema sea más visible cuando esté escribiendo código en el IDE.
Modificación de la declaración de clase
Para encontrar las clases, busco cualquier clase que tenga una anotación hija de @Test de Junit 5, es decir, org.junit.jupiter.api.Test
Y donde la clase tiene el modificador public:
search:
class:
with:
child:
annotation:
type: "org.junit.jupiter.api.Test"
modifier: "public"
Entonces la solución rápida cambia el modificador para eliminar la visibilidad para que sea la predeterminada, y la predeterminada es paquete privado que es lo que estoy buscando.
availableFixes:
- name: "remove public visibility from JUnit 5 Test class"
actions:
- changeModifiers:
visibility: ""
Modificación de las declaraciones de métodos
La receta de modificación de la declaración del método es muy parecida a la receta de la clase.
Primero busco los métodos públicos anotados con @Test de JUnit 5.
search:
method:
annotation:
type: "org.junit.jupiter.api.Test"
modificador: "public"
Y luego cambio el modificador para que sea la visibilidad por defecto.
availableFixes:
- name: "Remove @Test method public visibility"
actions:
- changeModifiers:
visibility: ""
Sugerencia: Modificación de varios métodos
Sensei tiene la capacidad de aplicar el QuickFix a todas las violaciones en el archivo actual.
Cuando uso alt+enter para aplicar el QuickFix.
Si despliego el menú de nombres de QuickFix, puedo ver una opción para:
"Arreglar todo: 'JUnit: Los métodos de prueba de JUnit 5 no necesitan ser públicos' problemas en el archivo"
Si selecciono esa opción, Sensei modificará todas las incidencias del problema, no sólo la que yo seleccione.
Modificación de la clase
De la misma manera que un método no necesita ser público, tampoco lo necesita la clase.
Puedo crear una receta y un QuckFix para modificar la clase.
Nombre - JUnit: Las clases de prueba de Junit 5 no necesitan ser públicas
Descripción - Las clases de prueba de Junit 5 no necesitan ser públicas
Nivel - Error
Cuando encuentro una clase que es pública y tiene un método con una anotación @Test. Entonces quiero cambiar la visibilidad.
búsqueda:
clase:
modificador: "public"
anyOf:
- child:
method:
annotation:
type: "Test"
Puedo volver a realizar el cambio en la definición de la clase con la acción changeModifiers.
availableFixes:
- name: "Remove @Test class public visibility"
actions:
- changeModifiers:
visibility: ""
Resumen
Una herramienta de análisis estático me alertó inicialmente de este enfoque recomendado en JUnit. Pero la herramienta de análisis estático no me ayudó a construir la memoria muscular para cambiar mi código mientras programo.
Utiliza el 'Nivel' para alertarte. Cuando se trata de un problema que estoy tratando de eliminar en mi codificación, inicialmente lo pongo como 'Error' y luego lo reduzco a medida que me alejo del enfoque de la codificación.
Recuerde que puede utilizar Sensei para arreglar todos los problemas del archivo actual al mismo tiempo, utilizando la opción del menú desplegable al aplicar el QuickFix.
Al crear una receta en Sensei , puedo ver mi antiguo enfoque de codificación en tiempo real. Y QuickFix, para reforzar el enfoque si de vez en cuando me equivoco en la codificación.
---
Puede instalar Sensei desde IntelliJ usando "Preferences \ Plugins" (Mac) o "Settings \ Plugins" (Windows) y luego sólo busque "sensei secure code".
El código fuente y las recetas para esto se pueden encontrar en el repositorio `sensei-blog-examples` en la cuenta GitHub de Secure Code Warrior , en el módulo `junitexamples`.