Modificación de la visibilidad de métodos y clases para JUnit 5

Publicado el 21 de diciembre de 2020
por Alan Richardson
ESTUDIO DE CASO

Modificación de la visibilidad de métodos y clases para JUnit 5

Publicado el 21 de diciembre de 2020
por Alan Richardson
Ver recurso
Ver recurso

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.


Eliminar la visibilidad pública del método de prueba

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`.



Ver recurso
Ver recurso

Autor

Alan Richardson

¿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

Modificación de la visibilidad de métodos y clases para JUnit 5

Publicado el 21 de diciembre de 2020
Por Alan Richardson

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.


Eliminar la visibilidad pública del método de prueba

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`.



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.